如何更改 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 中的用户模型以使用其他表进行身份验证而不是用户?的主要内容,如果未能解决你的问题,请参考以下文章