簡體   English   中英

Sentry使用Laravel 4中的用戶名或電子郵件(任何一個)登錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM