Laravel 4 - 硬编码认证

mat*_*ska 4 php authentication laravel laravel-4

我想创建不需要数据库的身份验证机制,只有一个知道正确用户名和密码(我会硬编码)的人(管理员)才能登录。我还是想用Auth::attempt()、Auth::check()等函数。

我发现我可以创建自己的User driver,但在我看来应该有更简单的东西。

也许这不是很好的解决方案,但我想要尽可能简单的网站。

Bog*_*dan 5

看起来似乎应该有更简单的东西,但实际上,如果您想扩展身份验证系统,那就很简单了。所有你正在使用的方法通过Auth门面(如attemptcheck等),都是内实现Illuminate\Auth\Guard类。这个类需要一个UserProviderInterface实现被注入到构造函数中才能工作。这意味着为了使用Auth外观,您需要使用已经实现的DatabaseUserProviderEloquentUserProvider,或者实现您自己的提供程序来处理您想要的简单登录。

尽管您链接到的文章可能看起来很长,但要实现您的需要,您可能会在提供程序中使用比您想象的少得多的代码。这是我认为你需要的:

1.在您app/config/auth.php将驱动程序更改为simple并附加所需的登录凭据时:

'driver' => 'simple',
'credentials' => array(
    'email'    => 'user@email.com',
    'password' => 'yourpassword'
)
Run Code Online (Sandbox Code Playgroud)

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

3.最后,您需要向身份验证系统注册新的提供者。您可以将其附加到app/start/global.php文件中:

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

这应该给你一个简单的(无数据库)用户身份验证,同时仍然能够使用 Laravel 的外观。