Laravel 5.4没有数据库的基本身份验证

时间:2017-05-15 14:08:27

标签: php laravel authentication basic-authentication laravel-5.4

问题:我需要在使用Laravel 5.4创建的API上实现基本身份验证。由于我们需要在没有数据库的情况下实现它(只是从config()获取凭据),我尝试创建一个如下所示的已注册中间件:

<?php

namespace App\Http\Middleware;

class AuthenticateOnceWithBasicAuth
{
    public function handle($request, $next)
    {
        if($request->getUser() != conf('auth.credentials.user') && $request->getPassword() != conf('auth.credentials.pass')) {
            $headers = array('WWW-Authenticate' => 'Basic');
            return response('Unauthorized', 401, $headers);
        }
        return $next($request);
    }
}

它可以工作,但这样我只能拥有整个API的一个凭据。 我试图在配置中创建多个凭据,从请求中保存用户和密码,但这样,它就像基本身份验证被禁用一样。

问题:有没有办法实现这个目标?如何在不使用数据库的情况下在配置文件中拥有多个凭据?

2 个答案:

答案 0 :(得分:4)

您可以将配置文件中的授权用户名和密码保存为集合

config/myconfig.php

return [
        'authorized_identities' => collect([
             ['user1','password1'],
             ['user2','password2'],
             ...
        ]),
];

然后在你的中间件

if(config('myconfig.authorized_identites')->contains([$request->getUser(),$request->getPassword()]))

答案 1 :(得分:0)

您可以拥有一系列凭据,并尝试将输入与其中任何一个匹配并进行验证。说实话,您可以使用sqlite数据库轻松实现此功能。它需要简约的设置,您可以在5分钟内开始使用它。