我正在基于现有数据库创建一个新的laravel 4后端。然后我有一个名为'FormMembers'的表,其中包含我的成员的电子邮件和密码。
我想使用Auth :: functions这样的函数:
$credentials = array(
'sEmail' => Input::get('email'),
'sPassword' => Input::get('password')
);
if (Auth::attempt($credentials)) {
return Response::json(Auth::user());
} else {
return Response::json(array('flash' => 'invalid password or email.'), 500);
}
所以我将 auth.php 中的表格字段从“用户”更改为“FormMembers”,并对用户模型执行了相同的操作。但是当调用Auth :: user()时我得到了错误:
{"error":{"type":"ErrorException","message":"Undefined index: password","file":"\/home\/www\/accred\/web\/vendor\/laravel\/framework\/src\/Illuminate\/Auth\/EloquentUserProvider.php","line":75}}
你知道我怎么能管理它吗? 感谢
答案 0 :(得分:1)
凭据数组中雄辩的user provider requires一个password
字段。您传递了一个键为sPassword
的数组。
你应该能够做到
$credentials = array(
'password' => Input::get('email'),
'sEmail' => Input::get('password'),
);
Auth::attempt($credentials);
并从User eloquent模型处理其余部分。即使您的用户表具有不同的列。
编辑:
Auth :: attempt()函数由Illuminate的Guard类处理。
这将调用retrieveByCredentials
,然后调用实现validateCredentials
的类的UserProviderInterface
方法。默认情况下,这是EloquentUserProvider
。
retrieveByCredentials
方法使用除凭证数组的密码密钥以外的所有密钥。它返回一个User eloquent模型对象。所以使用
那里你的'电子邮件'密钥。
在eloquent用户提供程序上调用的validateCredentials
方法检查凭证数组中password
字段的哈希是否与从您getAuthPassword
方法检索到的哈希密码匹配用户对象,它需要实现,因为它实现了UserInterface
。
因此,您应该覆盖User类上的getAuthPassword
方法。
public function getAuthPassword(
{
return $this->sPassword;
}
像这样返回存储在DB中的散列密码。
当然,您的密码应该像Hash :: make一样进行哈希处理。如果不是:
BcryptHasher