用户身份验证未在 Laravel 包中持续存在

User Auth not persisting within Laravel package

这是我第一次尝试 laravel 包,运行 遇到了一个问题,其中 Auth::attempt($credentials) 在我的登录控制器中工作,但在重定向到受保护的路由或控制器,用户不再经过身份验证。下面是我的登录控制器方法,其中重定向到仪表板已被注释掉。

public function attempt(Request $request){

    $email =  strtolower(strip_tags(htmlspecialchars($request->input('email'))));
    $password = strip_tags(htmlspecialchars($request->input('password')));

    if (Auth::attempt(array('email' => $email, 'password' => $password)))
    {
        // Redirect to dashboard route
        //return redirect()->intended('/admin');
        if(Auth::check())
            print_r(Auth::user());
    }
}

对有效凭据的响应会打印出正确的用户记录,并且 Auth::check returns 为真。但是,当重定向到管理控制器时,用户未通过身份验证。下面是应该输出经过身份验证的用户的管理控制器方法,但只有 returns "not logged".

public function index()
{
    if(Auth::check()) print_r(Auth::user());
    else echo "not logged";
}

两个controller都使用Auth;,命名空间与vendor/package/pathToDir一致,db设置正确,加密key设置。关于出了什么问题的任何想法?谢谢

该方法尝试的默认行为是不让用户保持登录状态。

您应该将其更改为:

if (Auth::attempt(array('email' => $email, 'password' => $password), false, true))

这样,您将 remember 设置为 false,将 login 设置为 true。

在这里查看更多相关信息:https://laravel.com/docs/5.2/authentication

原来问题出在新的网络中间件上,将我所有需要会话数据的路由移到了路由组中,一切正常。

Route::group(['middleware' => ['web']], function () {

    Route::get("/login", ['uses'=>'SiteLogin@index']);
    Route::post("/login", ['uses'=>'SiteLogin@attempt']);
    Route::get("/logout", ['uses'=>'SiteLogin@logout']);

    Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () {
        Route::get('/', ['uses'=>'Admin@index']);
    });
});