[英]Sentry Login using username or email (any of em) in Laravel 4
目前我正在使用電子郵件登錄哨兵,我知道如果我只是改變它,它可以很容易地轉換成用戶名
sentry配置文件到此
'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 = 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) {
...
}
通過這種方式,我們只訪問數據庫一次用戶信息。
希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.