laravel 5.4 auth 外观不起作用

Posted

技术标签:

【中文标题】laravel 5.4 auth 外观不起作用【英文标题】:laravel 5.4 auth facade does not work 【发布时间】:2018-01-03 22:59:24 【问题描述】:

Laravel 5.4 Auth 外观不起作用。 auth 中间件功能正常。正如预期的那样,对受保护路由的调用会生成登录页面。格式错误的凭据会产生预期的错误。正如预期的那样,正确的凭据会生成正确的页面。注释掉“使用 Illuminate\Support\Facades\Auth;”这一行如预期的那样产生错误“找不到类'App\Http\Controllers\Admin\Auth'”。

具体来说,Auth::check() 会产生 false,而 Auth::user() 不会返回任何内容,尽管登录成功。调用 Auth 外观的这些实现中的任何一个都不会产生错误。

这段代码在 Laravel 5.2 中运行良好。我知道的唯一偏离过程是,在迁移到 Laravel 5.4 期间,我没有在新的 Laravel 实现中运行命令“php artisan make:auth”。

在 Bing 或 *** 内部搜索引擎中搜索“laravel 5.4 auth facade does not work”不会产生相关结果。

显示相关代码,如下:

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\User;
use App\Models\Admin;
use App\Models\Role;
use App\Models\Role_user;
use App\Models\Client;
use App\Models\Contact;
use App\Models\PublicPages;
use App\Models\Survey_question;
use App\Models\Survey_item;
use App\Models\Survey_project;
use App\Models\State;
use App\Models\Test_post;
use App\Models\Registration;
use Hash;
use Redirect;
use DB;
use Illuminate\Support\Facades\Auth;
use App\Classes\RoleHelper;
use App\Classes\CommonCode;

class AdminController extends Controller

var $obj_logged_in_user;
var $arr_logged_in_user;
var $bool_has_role;
var $roleHelper;
//organization of function
// 1. __construct
// 2. index
// get, alphabetically
// post, alphabetically

public function __construct(
        Role_user $role_user, RoleHelper $roleHelper, Request 
$request)
   

    $this->middleware('auth');
    echo "<pre>";
    echo "admin controller, line 50<br>";
    print_r($request->user);
    echo "</pre>";
    // line 49 (request->user) produces nothing

    if (Auth::check())
    

        $this->middleware('role:admin');
        $this->obj_logged_in_user = Auth::user();
print_r($this->obj_logged_in_user);
// line 58 (print_r) produces nothing
        $this->arr_logged_in_user = $roleHelper->prepare_logged_in_user_info($this->obj_logged_in_user);

      // end if Auth::check()

 // end __construct function

总之,我希望 Auth::check() 返回准确的结果,并希望 Auth::user() 返回登录的用户对象。先感谢您。

【问题讨论】:

你不能在构造函数中使用它,中间件甚至没有在这个时间点运行。 会话没有在中间件中设置,因此用户也不会离开 Auth 门面。这不是使用控制器的正确方式,它是反模式的一个例子。 【参考方案1】:

如果您想在 __construct() 方法中使用 Auth 函数,则需要在闭包内将其传递给 $this-&gt;middleware()

public function __construct(Role_user $role_user, RoleHelper $roleHelper)

    $this->middleware('auth');
    $this->middleware('role:admin');
    $this->middleware(function ($request, $next) use ($role_user, $roleHelper) 

        if (Auth::check()) 

            $this->obj_logged_in_user = Auth::user();
            $this->arr_logged_in_user = $roleHelper->prepare_logged_in_user_info($this->obj_logged_in_user);

          

        return $next($request);
    );

另外,仅供参考,您可能会发现使用 Laravel 附带的 dump()dd() 函数更容易。而不是写:

echo "<pre>";
echo "admin controller, line 50<br>";
print_r($request->user);
echo "</pre>";

你可以改写:

dump('admin controller, line 50', $request->user);

https://laravel.com/docs/5.4/helpers#method-dd

希望这会有所帮助!

【讨论】:

但是如果你设置了auth中间件,如果用户没有登录,它会重定向用户。有没有办法检查用户是否登录,而不自动重定向? @Benubird 只是不要包括 $this-&gt;middleware('auth'); 位(很可能也包括 role:admin 位)。 如果不使用中间件,则 Auth::user 返回 null 而 Auth::check 返回 false @Benubird 如果您没有登录用户,这是正常的。

以上是关于laravel 5.4 auth 外观不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PhpStorm Laravel 5.4 自动外观支持

Laravel 5.4 有时验证规则不起作用

Laravel 5.4 - 拖放不起作用

Route::currentRouteAction 在 laravel 5.4 中不起作用

Laravel 5.4数据库迁移不起作用[重复]

Laravel 5.4 下载 csv 文件不起作用