2015-05-11 116 views
4

我想創建身份驗證機制而不需要數據庫,其中只有一個知道正確用戶名和密碼(我將硬編碼)的人(admin)能夠登錄。我仍然想使用Auth :: attempt(),Auth :: check()等功能。Laravel 4 - 硬編碼身份驗證

我發現我可以創建自己的User driver,但在我看來應該有一些更簡單的東西。

也許這不是很好的解決方案,但我希望儘可能簡單的網站。

+0

儘可能簡單意味着您可以簡單地擴展'attempt'和'check'方法並實現一個簡單的比較器函數,該函數只檢查用戶+密碼正確組合的請求輸入。 –

回答

4

它似乎只應該有一些簡單的事情,但事實上,如果你想擴展認證系統,就可以簡單得多。您通過Auth外觀(如attempt,check等)使用的所有方法均在Illuminate\Auth\Guard類中實施。這個類需要將UserProviderInterface實現注入到構造函數中才能工作。這意味着要使用Auth外觀,您需要使用已實施的DatabaseUserProviderEloquentUserProvider,或者實施自己的提供者來處理您想要的簡單登錄。

雖然您鏈接的文章可能看起來很冗長,但爲了實現您的需要,您可能會在提供程序中使用的代碼少得多,而不是您想象的那樣。這是我想什麼是你需要的東西:

1.在你app/config/auth.php改變司機simple並添加所需的登錄憑據:

'driver' => 'simple', 
'credentials' => array(
    'email' => '[email protected]', 
    'password' => 'yourpassword' 
) 

2.創建一個文件在您app目錄所謂SimpleUserProvider.php具有此代碼:

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\GenericUser; 
use Illuminate\Auth\UserProviderInterface; 

class SimpleUserProvider implements UserProviderInterface { 

    protected $user; 

    public function __construct(array $credentials) 
    { 
     $this->user = new GenericUser(array_merge($credentials, array('id' => null))); 
    } 

    // If you only need to login via credentials the following 3 methods 
    // don't need to be implemented, they just need to be defined 
    public function retrieveById($identifier) { } 
    public function retrieveByToken($identifier, $token) { } 
    public function updateRememberToken(UserInterface $user, $token) { } 

    public function retrieveByCredentials(array $credentials) 
    { 
     return $this->user; 
    } 

    public function validateCredentials(UserInterface $user, array $credentials) 
    { 
     return $credentials['email'] == $user->email && $credentials['password'] == $user->password; 
    } 

} 

3。最後,您需要向認證系統註冊新的提供商。你可以把這段app/start/global.php文件:

Auth::extend('simple', function($app) 
{ 
    return new SimpleUserProvider($app['config']['auth.credentials']); 
}); 

這應該給你一個簡單的(沒有數據庫)用戶身份驗證,同時仍然能夠使用Laravel的門面。

+0

謝謝,它工作(幾乎:))。我只需要添加這個 'app_path()。 '/ components','ClassLoader :: addDirectories',並且把'SimpleUserProvider'放到'app/components'目錄下。 – matiska

+0

其實,我可以通過'Auth :: attemp',但'Auth :: check'總是返回'false',即我總是客人。這裏是我的代碼片段:[pastebin](http://pastebin.com/zsq70KwK) – matiska