首页 文章

Laravel 5.2 - 使用new \ App \ User时,Auth :: login不会保留

提问于
浏览
1

我已经将这些代码用于 authenticate username from external source without using database ,但是laravel 5.2没有保存身份验证,并且每次都请求外部源 .

class Authenticate
{
    public function handle($request, Closure $next, $guard = null)
        {
            if (Auth::guard($guard)->guest()) {
                if ($request->ajax()) {
                    return response('Unauthorized.', 401);
                } else {
                    $username = getFromExternalSource();
                    if($username==null){ redirect()->guest('auth/login'); }
                    $user = new \App\User(['username'=>'admin']);
                    Auth::login($user);
                }
            }

            return $next($request);
        }
}

但是,当我使用$ user模型从数据库更改Auth :: login时,它工作,我不知道为什么:

$userDB = \App\User::where('username','=','admin')->first();
Auth::login($userDB);

我的路线(例如我想访问http://myApp/api

Route::group(['middleware' => ['web']], function () {
    Route::group(['middleware' => 'auth'], function () {
        Route::get('api/', 'ApiController@index');
    });
    Route::group(['middleware' => ['csrf']], function () {
       Route::controllers([
           'auth' => 'Auth\AuthController',
           'password' => 'Auth\PasswordController'
       ]);
   });

});

1 回答

  • 1

    据我所知,默认的身份验证方法,你需要传递数据库中存在的模型 . 在您的示例中,您只创建了对象并将其分配给它 username 属性 .

    如果您需要对所选用户进行身份验证,则应使用:

    Auth::loginUsingId($id);
    

    (代替 $id ,您应该传递您要进行身份验证的用户的ID - 在您的情况下使用用户名 admin 的用户ID)

相关问题