一尘不染

laravel 4自定义命名密码列

php

因此,我已经发现了一些问题,这些问题表明您必须重写getAuthPassword()才能从数据库提供密码列的自定义名称。试图将此方法与数据库中的列同名,但没有起作用。它仍然会发生以下错误:未定义的索引:密码。

这是身份验证:

if (Auth::attempt(Input::only('user_displayName'), Input::get('user_password')))

试图在表格和控制器中都将user_password更改为密码,但无效。

所以问题是,如果我在数据库中有一个名为“ user_password”的列,是否可以使Auth工作?

PS检查了我发现的每个较旧的解决方案

编辑

用户表的结构:

+======================+
|        User          |
+======================+
|       user_id        |
+----------------------+
|   user_displayName   |
+----------------------+
|     user_fname       |
+----------------------+
|      user_lname      |
+----------------------+
|      user_email      |
+----------------------+
|     user_password    |
+----------------------+
|      created_at      |
+----------------------+
|      updated_at      |
+----------------------+

阅读 270

收藏
2020-05-29

共1个答案

一尘不染

tldr; 只要您的User模型正确实现了接口,就可以为您的密码字段命名。

但是,您不能将其他数组键传递给该Auth::attempt方法-只有password索引可以在那里

首先,您做错了-您需要传递一组凭据作为第一参数:

if (Auth::attempt(Input::only('user_displayName', 'user_password')))

接下来,不幸的是,Eloquentprovider
password在代码中具有硬编码的数组索引,因此您无法传递user_password给该attempt方法。

因此,这就是您需要的:

$credentials = Input::only('user_displayName');
$credentials['password'] = Input::get('user_password');

if (Auth::attempt($credentials))

// or simply rename the input in your form to password and:
if (Auth::attempt(Input::only('user_displayName', 'password')))
2020-05-29