因此,我已经发现了一些问题,这些问题表明您必须重写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 | +----------------------+
tldr; 只要您的User模型正确实现了接口,就可以为您的密码字段命名。
但是,您不能将其他数组键传递给该Auth::attempt方法-只有password索引可以在那里
Auth::attempt
password
首先,您做错了-您需要传递一组凭据作为第一参数:
if (Auth::attempt(Input::only('user_displayName', 'user_password')))
接下来,不幸的是,Eloquentprovider password在代码中具有硬编码的数组索引,因此您无法传递user_password给该attempt方法。
Eloquent
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')))