[英]Manual Multi Auth in Laravel
My question is simple I want to have multi auth (for user + admin) in my laravel app using guard, so I can in the controller simply check if the authenticated user is admin or not, like this: 我的问题很简单,我想在我的laravel应用中使用Guard进行多认证(针对用户+ admin),因此我可以在控制器中简单地检查通过身份验证的用户是否为admin,如下所示:
public function addCategories(Request $request) {
if (!Auth::guard('admin')->check()) {
abort(404);
}
....
}
But the code above always return false, don't know why, and this is my admin login: 但是上面的代码总是返回false,不知道为什么,这是我的管理员登录名:
public function doLogin(Request $request) {
try {
$validator = \Validator::make($request->post(), [
'username' => array(
'required',
'string',
'max:12',
'regex:/(^[A-Za-z0-9_]+$)+/'
),
'password' => 'required|max:12'
]);
if ($validator->fails()) {
//$validator->errors()
throw new Exception('post data are incorrect');
}
$admin = Admin::where('AUsername', '=', $request->post('username'))
->first();
if ($admin == null) {
throw new Exception('username or password are incorrect');
} else if (!\Hash::check($request->post('password'), $admin->toArray()['APassword'])) {
throw new Exception('username or password are incorrect');
}
Auth::guard('admin')->login($admin);
if (!Auth::guard('admin')->check()) {
throw new Exception('could not login, please try again later');
}
return response()->json([
'success' => 'login success'
]);
} catch(Exception $e) {
return response()->json(
['error' => $e->getMessage()]
);
}
}
By the way I didn't user (Auth::attempt()), because it always faild (returned false)) 顺便说一句,我没有使用(Auth :: attempt()),因为它总是失败(返回false))
And finally this is my auth.php: 最后这是我的auth.php:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
您应该从Authenticatable而不是雄辩的模型扩展admin模型,并为需要admin权限的路由调用auth:admin中间件,而且此链接可以帮助您在laravel中进行多重身份验证
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.