我已使用这些代码从外部来源验证用户名而不使用数据库,但是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'
]);
});
});
答案 0 :(得分:1)
据我所知,对于默认的身份验证方法,您需要传递数据库中存在的模型。在您的示例中,您只创建了对象并将其分配给它username
属性。
如果您需要验证所选用户,则应使用:
Auth::loginUsingId($id);
(代替$id
,您应该传递要进行身份验证的用户的ID - 在您的情况下,用户名为admin
的用户ID