【发布时间】:2015-12-18 18:34:46
【问题描述】:
我正在使用已设置的数据库将旧应用程序升级到 Laravel 5.1,并使用开箱即用的身份验证系统(内置)。注册/登录仅在我使用电子邮件和密码作为字段名称时才有效,否则它让用户注册但不让他们登录。我的问题是我们可以使用自己的归档名称吗?
【问题讨论】:
我正在使用已设置的数据库将旧应用程序升级到 Laravel 5.1,并使用开箱即用的身份验证系统(内置)。注册/登录仅在我使用电子邮件和密码作为字段名称时才有效,否则它让用户注册但不让他们登录。我的问题是我们可以使用自己的归档名称吗?
【问题讨论】:
我相信您需要更改 migrations 和 User 模型的 $fillable 属性... AuthController 和 Illuminate\Foundation\Auth\AuthenticatesUsers postLogin 和 loginUsername 方法
【讨论】:
Illuminate\Foundation\Auth\AuthenticatesUsers...现在我建议做其他事情...不要试图弄乱代码...但是,仍然更新您的问题并解释你正在尝试做的改变..
AuthController 和User 模型的更改是可以接受的..
Laravel 使这变得非常简单。就像@pespantelis 所说,您可以覆盖电子邮件字段。在您的表格中:
<input type="email" name="co_Email">
那么,在你的AuthController:
protected $username = 'co_Email';
为了让 Laravel 在仍然使用默认身份验证系统的同时查看正确的密码列,这有点不同,但仍然同样简单。只需按照以下步骤操作:
不要更改密码字段的名称,只需像往常一样将其命名为“密码”:
<input type="password" name="password">
但是将此方法添加到您的用户模型中:
public function getAuthPassword()
{
return $this->co_Password;
}
Laravel 会将“密码”字段与“co_Password”列进行比较。
【讨论】:
您应该将 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(),
]);
}
【讨论】:
protected function getCredentials(Request $request) { return $request->only($this->loginUsername(), 'co_Password'); } 现在登录时,它会显示一条错误消息 这些凭据与我们的记录不匹配。
co_Name 字段,它就像一个魅力。