所以我发现了一些问题,说你必须覆盖getAuthPassword()以从数据库中提供密码列的自定义名称。尝试将此方法与数据库中的列同名,并且无法正常工作。它仍然会发出此错误:未定义的索引:密码。
这是auth:
if (Auth::attempt(Input::only('user_displayName'), Input::get('user_password')))
尝试在表单和控制器中将user_password更改为密码无效。
所以问题是如果我在名为“user_password”的数据库中有一个列,是否有办法让Auth工作?
P.S检查了我发现的每个旧解决方案
修改
用户表的结构:
+======================+
| User |
+======================+
| user_id |
+----------------------+
| user_displayName |
+----------------------+
| user_fname |
+----------------------+
| user_lname |
+----------------------+
| user_email |
+----------------------+
| user_password |
+----------------------+
| created_at |
+----------------------+
| updated_at |
+----------------------+
答案 0 :(得分:7)
<强> tldr;只要您的用户模型正确实现了界面,您就可以将密码字段命名为您喜欢的任何名称。
但是,您无法将不同的数组键传递给Auth::attempt
方法 - 只有password
索引可以在那里
首先,你做错了 - 你需要传递一组凭证作为第一个参数:
if (Auth::attempt(Input::only('user_displayName', 'user_password')))
接下来,遗憾的是Eloquent
提供商在代码中包含了硬编码的password
数组索引,因此您无法将user_password
传递给attempt
方法。< / p>
所以这就是你所需要的:
$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')))
答案 1 :(得分:1)
我没有对此进行测试,但我相信你只需要覆盖UserTrait.php中的一个函数,尽管不要破解源代码。在您的models / User.php文件中添加以下功能。
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->user_password;
}
答案 2 :(得分:1)
在实现给定接口的情况下,有一个静态解决方案是不够的(例如,您有两个密码列,一个用户密码和一个支持密码)。
$qry = DB::table('users')
->where('email', $email)
->whereNotNull('support_password')
->first();
if(!empty($qry))
{
$check = Hash::check($password, $qry->support_password);
if ($check)
{
Auth::loginUsingId($qry->id, true);
}
}
答案 3 :(得分:0)
这是我在不更改供应商代码的情况下将Laravel登录的默认电子邮件字段更改为“email_address”的方法。
我创建了一个特性类,扩展了供应商AuthenticatesUsers的特性。并且只扩展了用户名方法。
应用\ HTTP \控制器\验证\ AuthenticatesLogins.php:
namespace App\Http\Controllers\Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
trait AuthenticatesLogins
{
use AuthenticatesUsers {
AuthenticatesUsers::username as parentUsername;
}
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
$this->parentUsername();
return 'email_address';
}
}
现在在App \ Http \ Controllers \ Controller \ LoginController.php中:
class LoginController extends Controller
{
use AuthenticatesLogins; // <-- for custom login fields
// etc.
而且......完成了!希望这会有所帮助。