php - 来自两个以上表的 Laravel Multi Auth
问题描述
我想用 laravel 编写一个 Web 服务,
我正在尝试分别对用户和管理表单users
表和admins
表进行身份验证。
在此 Web 服务中,用户和管理员身份验证是不同的。验证管理员email
和用户由phone number
.Admins 通过Web
路由访问管理面板,用户使用API
路由。
据我所知Auth::attempt
,用于admins
从admins
表中进行身份验证,但我想从表中对其他用户进行身份验证,users
并从表中对管理员进行身份验证admin
。
任何人都可以通过示例从两个以上的表中解释 Multi Auth 吗?
我知道这
Auth::attempt
用于users
从用户表进行身份验证,但我更改了名称。
到目前为止我所做的
Guards
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
提供者
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
],
路由
web.php(管理员)
Route::group(['namespace' => 'Auth'] , function (){
// Authentication Routes...
$this->get('login', 'LoginController@showLoginForm')->name('login');
$this->post('login', 'LoginController@login');
$this->get('logout', 'LoginController@logout')->name('logout');
// Registration Routes...
$this->get('register', 'RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'RegisterController@register');
// Password Reset Routes...
$this->get('password/reset', 'ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'ResetPasswordController@reset');
});
api.php(用户)
Route::group(['prefix' => 'android/v1' , 'namespace' => 'Api\Android\v1'] , function (){
$this->post('login' , 'UserController@login');
$this->post('register' , 'UserController@register');
});
用户控制器api/android/v1/ UserController.php
public function login(Request $request)
{
$validData = $this->validate($request, [
'mobile' => 'required|exists:users',
'password' => 'required'
]);
if(! auth()->attempt($validData)) {
return response([
'data' => 'data not true',
'status' => 'error'
],403);
}
return new UserResource(auth()->user());
}
解决方案
我的第一个建议是为您的管理员和用户设置不同的控制器,然后您可以指定为什么要使用警卫来处理请求。
推荐阅读
- verilog - 当我编译我的 Verilog 代码时,我收到了这条消息。有人知道是什么原因吗?
- typescript - ionic 3 本机插件停止工作。我最后试着放了ngx。红线错误消失了。但是插件不起作用
- python - 如何告诉python在将命令传递给bash时忽略一个字符(Python to bash command SyntaxError: invalid syntax because of {)
- android - RxJava2、Android、Webview 在 Kotlin 中创建 Observable
- r - UseMethod(“predict”)中的错误:没有适用于“predict”的方法应用于 R 中类“c('uGARCHfit','GARCHfit','rGARCH')”的对象
- android - 在片段中获得非空上下文的保证方法是什么?
- ios - 没有故事板和segue的Swift委托问题
- active-directory - 如何使用搜索过滤器语法获取所有 Active Directory 用户详细信息
- canvas - 在 Tkinter 中将参数传递给函数会禁止 after() 方法操作
- conditional - 根据用户在 Mailchimp 中是否具有特定标签显示内容