目前我使用的是使用电子邮件的哨兵登录,我知道如果我简单地更改,它可以多么容易地转换为用户名
哨兵配置文件到此
'login_attribute' => 'username',
但我觉得这很奇怪,因为后来忘记密码信息的电子邮件变得无法访问。我想要的是,我想让用户在登录期间自由选择artibute作为用户名或给他们中的任何一个发电子邮件。。。。
知道怎么开始吗?
这是一种方法:
使用用户选择的任何登录字段定位用户:
$user = User::where(Input::get('login_field'), Input::get('login_name'))->first();
使用您刚刚找到的用户的电子邮件创建有效凭据:
$credentials = array(
'email' => $user ? $user->email : null,
'password' => Input::get('password'),
);
并对其进行身份验证:
$user = Sentry::authenticate($credentials, false);
首先,在数据库用户表中,应该添加username字段
在您的登录功能中,您可以通过用户名或电子邮件进行以下验证:
$username = Input::get('username');
$password = Input::get('password');
$field = filter_var($username, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
try {
if (empty($username)) {
throw new Cartalyst'Sentry'Users'LoginRequiredException();
}
if (empty($password)) {
throw new Cartalyst'Sentry'Users'PasswordRequiredException();
}
$user = User::where($field, '=', $username)
->first();
if (empty($user)) {
throw new Cartalyst'Sentry'Users'UserNotFoundException();
}
if (!Hash::check($password, $user->password)) {
throw new Cartalyst'Sentry'Users'WrongPasswordException();
}
// Authenticate the user
Sentry::login($user, $remember);
}
catch (Cartalyst'Sentry'Users'LoginRequiredException $e) {
...
}
catch (Cartalyst'Sentry'Users'PasswordRequiredException $e) {
...
}
catch (Cartalyst'Sentry'Users'WrongPasswordException $e) {
...
}
catch (Cartalyst'Sentry'Users'UserNotFoundException $e) {
...
}
catch (Cartalyst'Sentry'Users'UserNotActivatedException $e) {
...
}
通过这种方式,我们只访问一次数据库中的用户信息。
希望得到帮助。