gpt4 book ai didi

php - laravel 5.4 中两种不同的身份验证模型

转载 作者:可可西里 更新时间:2023-11-01 00:12:31 25 4
gpt4 key购买 nike

假设我有两个不同的模型和表,名为 usercompany

如你所知,laravel 使用 User 模型来管理身份验证。但是因为我有两个不同的模型,所以我希望可以分别管理它们。

我正在使用 laravel 5.4,但我不知道该怎么做。

最佳答案

如果您正在谈论多重身份验证系统,那么您必须创建多个守卫来实现这一点。

同样的问题有很好的答案。

Can anyone explain Laravel 5.2 Multi Auth with example

它是在 Laravel 5.2 上运行的,但它可以很容易地在 Laravel 5.4 上实现。

  1. 创建一个扩展 Authenticatable Class 的模型 App\Company。该模型将用作用户模型,它将公司保护(在下一步中)

    namespace App;

    use Illuminate\Notifications\Notifiable;
    use Illuminate\Foundation\Auth\User as Authenticatable;

    class Company extends Authenticatable
    {

    use Notifiable;

    /**
    * The attributes that are mass assignable.
    *
    * @var array
    */
    protected $fillable = [
    'name', 'email', 'password',
    ];

    /**
    * The attributes that should be hidden for arrays.
    *
    * @var array
    */
    protected $hidden = [
    'password', 'remember_token',
    ];

    }
  2. 为模型 App\Company 创建守卫和提供者。

    // Authenticating guards and providers

    'guards' => [
    'web' => [
    'driver' => 'session',
    'provider' => 'users',
    ],
    'api' => [
    'driver' => 'token',
    'provider' => 'users',
    ],
    'company' => [
    'driver' => 'session',
    'provider' => 'company',
    ],
    ],

    // Providers

    'providers' => [
    'users' => [
    'driver' => 'eloquent',
    'model' => App\User::class,
    ],
    'company' => [
    'driver' => 'eloquent',
    'model' => App\Company::class,
    ]
    ],

现在可以根据不同的门卫找到用户了。

$user = Auth::guard('company')->user();
// Or...
$user = auth()->guard('company')->user();
dd($user);
  1. 现在为公司 App\Http\Controllers\Auth\CompanyLoginController 创建 Auth Controller ,与 Auth\LoginController 相同。指定 $redirectToguard

    //Auth\ComapnyLoginController.php

    protected $redirectTo = '/comapany';
    protected $guard = 'comapany';

    public function showLoginForm()
    {
    if (view()->exists('auth.authenticate')) {
    return view('auth.authenticate');
    }

    return view('comapany.auth.login');
    }

现在为用户创建登录表单 - company.auth.login View 与用户的登录表单相同。

  1. 现在创建路由

    //Login Routes...
    Route::group(['prefix'=>'company', 'middleware'=>'company'], function(){
    Route::get('/login','Auth\CompanyLoginController@showLoginForm');
    Route::post('/login','Auth\CompanyLoginController@login');
    // ...
    // rest of the company dashboard and other links
    // ...
    Route::get('/logout','Auth\CompanyLoginController@logout');
    });
  2. 为公司创建一个中间件

    class RedirectIfNotCompany
    {
    /**
    * Handle an incoming request.
    *
    * @param \Illuminate\Http\Request $request
    * @param \Closure $next
    * @param string|null $guard
    * @return mixed
    */
    public function handle($request, Closure $next, $guard = 'company')
    {
    if (!Auth::guard($guard)->check()) {
    return redirect('/');
    }

    return $next($request);
    }
    }

    并将其注册到kernal.php

    protected $routeMiddleware = [
    'company' => \App\Http\Middleware\RedirectIfNotCompany::class,
    ];

这就是您所需要的。以守卫的名义访问用户

Auth::guard('company')->user()

关于php - laravel 5.4 中两种不同的身份验证模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com