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

时间:2015-12-29 13:28:00

标签: laravel authentication laravel-5 laravel-5.2

我已使用这些代码从外部来源验证用户名而不使用数据库,但是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 个答案:

答案 0 :(得分:1)

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

如果您需要验证所选用户,则应使用:

Auth::loginUsingId($id);

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