当前位置: 首页 > 知识库问答 >
问题:

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

谭吉星
2023-03-14

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

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

我使用laravel 5.4,我不知道如何能做到这一点。

共有1个答案

东方明亮
2023-03-14

如果您谈论的是多重身份验证系统,那么您必须创建多个防护装置来实现这一点。

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

有人能举例说明Laravel5.2多重身份验证吗

它在Laravel5.2上,但可以在Laravel5.4上轻松实现。

>

  • 创建扩展可验证类的模型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',
        ];
    
    }
    

    为Model 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);
    

    现在为公司App\Http\Controllers\Auth\CompanyLoginController创建与Auth\LoginController相同的Auth控制器。指定$redirectTo和guard

    //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');
    }
    

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

    现在创建路由

    //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');
    });
    

    为公司创建中间件

    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()
    

  •  类似资料:
    • 我的应用程序对spring-data-rest访问使用基本身份验证(“/API/**”下的所有内容),对面向客户端的API使用UserDetailsService进行JWT身份验证(本例中的所有内容都在“/component”下)。在升级到Spring Boot2之前,我的一切工作如下: CORS的东西有一个单独的配置,我现在不关心,因为它以前工作得很好,现在不是任何麻烦的来源。 因此,在升级到S

    • 我用Java和spring mvc框架编写了一个简单的应用程序。 我使用tomcat领域身份验证表单auth-method对用户进行身份验证,并将其重定向到自己的仪表板。 例如,login.jsp上的用户输入用户名和密码,现在在控制器中检查名称并通过和使用request.login(用户名,密码)方法,然后将重定向客户端发送到仪表板页面。 现在我创建了一个restful api,用于检测来自服务器

    • 我正在开发一个带有两步身份验证的Symfony API应用程序。第一步是带有用户名和密码的表单,第二步是带有SMS服务的OTP。在json_login成功之后,json_login身份验证器必须创建jwt。因为,我使用令牌而不是PHP会话。它是通过选项在security.yaml文件中配置的。 利用Symfony框架可以制作多种不同的身份验证器和防火墙。在第一步(json_login)中,对用户进

    • 本文向大家介绍asp.net mvc中Forms身份验证身份验证流程,包括了asp.net mvc中Forms身份验证身份验证流程的使用技巧和注意事项,需要的朋友参考一下 验证流程 一、用户登录 1、验证表单:ModelState.IsValid 2、验证用户名和密码:通过查询数据库验证 3、如果用户名和密码正确,则在客户端保存Cookie以保存用户登录状态:SetAuthCookie     1

    • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

    • 问题内容: 如何在Elasticsearch中定义安全性访问?我有elasticsearch-head插件,但是您的访问不需要任何安全性。 问题答案: 不再积极支持此答案中提到的插件。 elasticsearch中没有内置的访问控制。因此,您需要设置一个反向代理(这是一个博客文章,介绍如何设置nginx),使用第三方的Elasticsearch插件之一,例如https://github.com/A