【问题标题】:Laravel 5.1 Custom table names and field namesLaravel 5.1 自定义表名和字段名
【发布时间】:2015-12-18 18:34:46
【问题描述】:

我正在使用已设置的数据库将旧应用程序升级到 Laravel 5.1,并使用开箱即用的身份验证系统(内置)。注册/登录仅在我使用电子邮件和密码作为字段名称时才有效,否则它让用户注册但不让他们登录。我的问题是我们可以使用自己的归档名称吗?

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    我相信您需要更改 migrationsUser 模型的 $fillable 属性... AuthControllerIlluminate\Foundation\Auth\AuthenticatesUsers postLoginloginUsername 方法

    【讨论】:

    • 感谢 shafi,不仅在迁移、用户模型的可填充方面,而且在 AuthController 中也是如此。但仍然无法正常工作。
    • 请让我知道您正在尝试的一些更改。我会尝试做同样的事情
    • 我看到您还需要更改Illuminate\Foundation\Auth\AuthenticatesUsers...现在我建议做其他事情...不要试图弄乱代码...但是,仍然更新您的问题并解释你正在尝试做的改变..
    • 在数据库中,我有字段 co_Password、co_Name、co_Email。我想在 laravel auth 中使用。我无法更改字段名称,因为这些名称也被其他应用程序使用。好吧,如果我们更新 AuthenticatesUsers 之类的特征,那么在下一次工匠更新时,这些会被覆盖吗?
    • 那么我相信@thomas-kim 提出了一个不错的解决方案。对AuthControllerUser 模型的更改是可以接受的..
    【解决方案2】:

    Laravel 使这变得非常简单。就像@pespantelis 所说,您可以覆盖电子邮件字段。在您的表格中:

    <input type="email" name="co_Email">
    

    那么,在你的AuthController

    protected $username = 'co_Email';
    

    为了让 Laravel 在仍然使用默认身份验证系统的同时查看正确的密码列,这有点不同,但仍然同样简单。只需按照以下步骤操作:

    1. 不要更改密码字段的名称,只需像往常一样将其命名为“密码”:

      <input type="password" name="password">
      
    2. 但是将此方法添加到您的用户模型中:

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

    Laravel 会将“密码”字段与“co_Password”列进行比较。

    【讨论】:

      【解决方案3】:

      您应该将 username 属性设置为 AuthController。

      class AuthController extends Controller
      {
          use AuthenticatesAndRegistersUsers, ThrottlesLogins;
      
          protected $username = 'field_name';
      
          ...
      }
      

      检查Illuminate\Foundation\Auth\AuthenticatesUsers@loginUsername 方法。

      编辑

      如果你想更改 password 字段名(或在 laravel auth 中使用另一个字段),你应该重写 postLogin 方法,因为它是硬编码的。

      public function postLogin(Request $request)
      {
          $this->validate($request, [
              'co_Email' => 'required', 'co_Password' => 'required'
          ]);
      
          $throttles = $this->isUsingThrottlesLoginsTrait();
      
          if ($throttles && $this->hasTooManyLoginAttempts($request)) {
              return $this->sendLockoutResponse($request);
          }
      
          $credentials = $request->only('co_Email', 'co_Password');
      
          if (Auth::attempt($credentials, $request->has('remember'))) {
              return $this->handleUserWasAuthenticated($request, $throttles);
          }
      
          if ($throttles) {
              $this->incrementLoginAttempts($request);
          }
      
          return redirect($this->loginPath())
              ->withInput($request->only('co_Email', 'remember'))
              ->withErrors([
                  'co_Email' => $this->getFailedLoginMessage(),
              ]);
      }
      

      【讨论】:

      • 谢谢,我刚刚更新了 Illuminate\Foundation\Auth\AuthenticatesUsers 文件,用代码更改了 postLogin 函数,与您的代码唯一不同的是,我们不需要 co_Name 作为必填字段。另外,我还在同一个文件中更新了 getCredentials 函数。 protected function getCredentials(Request $request) { return $request-&gt;only($this-&gt;loginUsername(), 'co_Password'); } 现在登录时,它会显示一条错误消息 这些凭据与我们的记录不匹配。
      • 抱歉,您的comment 让我很困惑。如果没有 co_Name 字段,它就像一个魅力。
      • co_Name 字段在 Reg。表格 .that 工作正常。现在,我更新了 AuthenticatesUsers、用户模型、登录视图和 app/Http/Controllers/Auth 中的 AuthController.php 文件中的代码,但仍然出现相同的错误消息。
      • 问题在于登录身份验证
      猜你喜欢
      • 2015-12-20
      • 2016-09-09
      • 1970-01-01
      • 2020-09-09
      • 2013-11-14
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多