【问题标题】:How to change 'users' auth table and use another instead Laravel如何更改 \'users\' 身份验证表并使用另一个 Laravel
【发布时间】:2022-11-14 23:56:31
【问题描述】:

所以我刚刚用Breeze启动了一个Laravel项目,我想改变默认表用户,问题是它没有用,我研究了几天,但没有得到任何成功的结果

我将尝试解释问题所在以及到目前为止我尝试过的内容。

首先,我创建了一个名为用户数据,而这张表,完全不同于用户桌子。 那些领域用户数据有,例如:名称值,密码值,年龄值,电子邮件值等(我也不得不提到桌子用户数据,它不使用迁移,因为我已经有一个 sql 文件,并将其直接添加到数据库中(我已经创建了带有主键和外键的表,所以我无法进行迁移,因为它会多花点时间),没有迁移我仍然可以获取数据,所以我不认为这可能是这个问题)。

实际上我正在使用 Breeze,但是,我也使用了 Auth 脚手架(PHP artisan make: Auth)

我尝试了什么:

经过几天的搜索,首先我创建了一个新模型,名为用户模型, this 的内容与用户模型但是我改变的是:

protected $table = 'users_data';

protected $fillable = [
    *name_value*,
    *password_value*,
];

和一个额外的功能来覆盖默认密码微风或 Auth(我猜):

public function getAuthPassword()
{
    return $this->password_value;
}

接下来我去了conf/auth.php

我在那里指定了模型:

   'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\UsersModel::class,
        ],

以及要使用的表格:

/*
|--------------------------------------------------------------------------
| Authentication Table
|--------------------------------------------------------------------------
|
| When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like.
|
*/

'table' => 'users_data',

在此之后我去了视图登录.blade.php,并且只改变了电子邮件输入(对于我在不同页面上阅读的内容,更改密码输入会导致不同的问题,因为我需要做很多改变才能让它工作所以最好的办法是用获取授权密码,在模型中指定):

新名称输入:

x-input id="email" class="block mt-1 w-full" type="text" name="name_value" :value="old('name_value')" required autofocus />

毕竟我去了登录请求(登录验证),我将电子邮件替换为名称值

我试图调试这个:

dd(Auth::attempt($this->only('name_value', 'password'), $this->boolean('remember')));

并返回 false

我注意到有一个功能供应商/laravel/ui/auth-back/AuthenticatesUsers称为username(),返回“电子邮件”

当我看到我记得一个页面说这个函数也可以覆盖,所以我将返回值更改为name_value,它没有做任何事情

最后,澄清一下,

我不需要注册站点我只需要登录页面,因此在 $fillable 中我没有添加数据库的所有列,只是我需要登录的列(名称值,密码值)

如果有人可以帮助我并指导我,那就太好了,因为我的想法已经用完了(我可以单独使用 PHP 来完成,但是,我需要->中间件['Auth],如果用户存在,有没有办法激活中间件?)

【问题讨论】:

  • 如果我们能看到您的 LoginController 类,我认为这也会有所帮助。
  • 问题是我没有 LoginController 类,当我通过 Breeze 创建它时它不会生成 LoginController(我不知道它是否是版本问题),但是当我通过 Auth 脚手架创建它时(PHP artisan make : Auth) 它生成它。我更习惯微风,但我可以单独改用 Auth 脚手架
  • 那么你是如何覆盖用户名方法的呢?
  • 首先我说我重写了位于 vendor/laravel/ui/auth-back/AuthenticatesUsers 中的用户名函数,但是我认为我错了我删除了那里所做的更改并在我制作的新模型中重写它'UsersModel '
  • 所以我在新模型中覆盖了用户名功能

标签: php laravel-8 breeze


【解决方案1】:

我认为编辑供应商文件不是一个好习惯。我们不会将它们推送到版本控制,这样其他开发人员就不会得到您的更改。此外,Laravel 已经有一种方法可以在不编辑供应商文件的情况下覆盖用户名值。

只需像这样在您的身份验证控制器中使用该特征:

public class MyLoginController {
   use AuthenticatesUsers; // or you can also use ThrottlesLogins trait

   // then override the username function here
   public function username() {
      return 'name_value';
   }
}

要覆盖密码,您可以在您的User 模型上定义它:

public function getPasswordAttribute() {
  return $this->attributes['password_value'];
}

public function getAuthPassword() {
  return $this->password_value;
}

我没有对此进行测试,但根据文档,这是你应该如何做的。还要确保阅读此 Laravel doc

【讨论】:

  • 我没有,就像在编辑供应商文件时那样,好点,我会尝试应用你的答案,我希望它有效,非常感谢!
  • jed 我有一个问题,我必须对密码做同样的事情吗? public function getAuthPassword() { return $this->password_value; },将其添加到模型或控制器中,就像您向我展示的用户名()和另一件事一样,在视图登录中,是否必须让密码名称保持原样或者我可以更改(因为我现在更改了电子邮件名称)
  • @ haruk1515 我已经更新了我的答案。如果您继续在模型中使用password_value,您在视图中的输入应该是相同的。
【解决方案2】:

所以你可能有一个名为 users_data.php 的模型。进入其中并将代码更改为类似的内容。

步骤1

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateFoundationAuthusers_data as Authenticatable;  //Add this line for Auth.


class users_data extends Authenticatable   //Extends child from Authenticatable parent class obj.
{
    use HasFactory;
    protected $fillable = ['column1', 'column2', 'column3', .....];
}

第2步 转到 config/auth.php。您可能会在下面找到类似的内容。

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppModelsUser::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

将 'model' => App Model User::class 更改为 'model' => AppModel user_data::class, 这是这部戏剧中的主角,默认情况下将您的应用程序放到用户表中。

步骤:3 注释掉 User.php,以免将来产生冲突。 现在您的应用程序已转移到您想要的表并准备登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2020-08-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    相关资源
    最近更新 更多