如何更改 laravel 中的用户模型以使用其他表进行身份验证而不是用户?

Posted

技术标签:

【中文标题】如何更改 laravel 中的用户模型以使用其他表进行身份验证而不是用户?【英文标题】:How to change the user model in laravel to use other table for authentication than users? 【发布时间】:2017-04-22 05:39:16 【问题描述】:

如何在 laravel 5.3 中更改默认用户模型以使用其他数据库表而不是用户表,正在添加

protected $table = 'my_table_name';

将做所有事情,还是我必须更改提供者和所有。

我不希望使用管理员、客户等多重身份验证,我只想要一个身份验证模型,但不希望使用“用户”表。

我正在准备一个具有多种用户类型的应用程序,例如管理员、占星家和用户。它们都有不同的属性,所以我不能使用带有访问控制的单一模型,所以我决定将应用程序分成 3 个网站以使用单一数据库并将它们托管在子域中,例如

admin.mywebsite.com
astrologer.mywebsite.com
www.mywebsite.com

之前我使用的是 multiauth/hesto 插件,但由于某种奇怪的原因,它没有在登录和注册后将我重定向到预期的 url。任何帮助将不胜感激。

【问题讨论】:

在用户表中创建 user_type 【参考方案1】:

转到 config/auth.php 更改此案例的提供者我将 api 提供者从 user 更改为 custom_user,然后使用 custom_user 模型类

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver'=>'passport',
        'provider'=>'custom_user'
    ],
]



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

【讨论】:

【参考方案2】:

检查这个Using Different Table for Auth in Laravel

编辑 app/config/auth.php 以更改表格。

'table' => 'yourTable'
'model' => 'YourModel',

那么你的模型:

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class YourModel extends Eloquent implements UserInterface, RemindableInterface 

    use UserTrait;
    use RemindableTrait;

    protected $table = 'your_table';
    protected $fillable = array('UserName', 'Password');    
    public $timestamps = true;
    public static $rules = array();    

【讨论】:

【参考方案3】:

转到您的配置\auth.php

修改配置

'guards' => [
    'astrologer' =>[
        'driver' => 'session',
        'provider' => 'astrologer',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

'providers' => [
    'astrologer' => [
        'driver' => 'eloquent',
        'model' => App\Astrologer::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],

更多详情请看这里的答案:Can anyone explain Laravel 5.2 Multi Auth with example

【讨论】:

答案是正确的,但我使用的是 laravel 5.3,这与我尝试过的非常不同但没有成功:( @TajKhan 运气好吗?你能张贴你做了什么吗?记得实现 auth 接口。【参考方案4】:

您可以使用模型中的$connection 属性指定要使用的数据库:

class MyModel extends Eloquent

    protected $connection = 'another-database-connection';

我不确定这是否是您正在寻找的东西。也就是说,如果你想为多个子域使用同一个 Laravel 应用程序,我建议你查看解释如何在路由中使用子域的文档:

https://laravel.com/docs/5.3/routing#route-group-sub-domain-routing

这将允许您拥有一个 User 类和一个应用程序,但您的 3 个子域中的每一个都有特定的路由。

【讨论】:

我想对所有三个子域使用相同的连接,我唯一想要的是将用户模型更改为使用“astrologers”表而不是“user”表和“admin”表作为管理子域 那么我相信你必须有一个User 模型,然后是一个Astrologer 和一个Admin,它们都将与belongsTo 模型具有belongsTo 关系。跨度>

以上是关于如何更改 laravel 中的用户模型以使用其他表进行身份验证而不是用户?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Auth 更改表名

如何在 laravel 4.2 中动态更改模型表?

如何在 Laravel 中更改用户表?

如何在 django 中更改模型时填充数据库字段

用户模型 laravel 中的自定义表

Laravel 5:用户关注其他用户(如twitter) - 如何设置关系