mat*_*ska 4 php authentication laravel laravel-4
我想创建不需要数据库的身份验证机制,只有一个知道正确用户名和密码(我会硬编码)的人(管理员)才能登录。我还是想用Auth::attempt()、Auth::check()等函数。
我发现我可以创建自己的User driver,但在我看来应该有更简单的东西。
也许这不是很好的解决方案,但我想要尽可能简单的网站。
看起来似乎应该有更简单的东西,但实际上,如果您想扩展身份验证系统,那就很简单了。所有你正在使用的方法通过Auth门面(如attempt,check等),都是内实现Illuminate\Auth\Guard类。这个类需要一个UserProviderInterface实现被注入到构造函数中才能工作。这意味着为了使用Auth外观,您需要使用已经实现的DatabaseUserProvider或EloquentUserProvider,或者实现您自己的提供程序来处理您想要的简单登录。
尽管您链接到的文章可能看起来很长,但要实现您的需要,您可能会在提供程序中使用比您想象的少得多的代码。这是我认为你需要的:
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 的外观。