0

问题:我需要在使用Laravel 5.4创建的API上实现基本身份验证。由于我们需要实现它没有数据库(刚从config()获得证书),我试图创建一个注册中间件类似以下:Laravel 5.4没有数据库的基本身份验证

<?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。 我试图在配置中创建多个凭证,从请求中保存用户和密码,但这样,它就像禁用基本身份验证一样工作。

问题:有什么办法可以达到这个目的吗?我怎样才能在我的配置文件中有多个凭据,而不使用数据库?

+0

没有与此代码的问题!只有在用户名和密码不匹配的情况下,您才返回401。如果用户提供了有效的用户名,但密码无效,他就会得到认证。你应该使用||而不是&& – fhugas

回答

2

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

config/myconfig.php

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

,然后在你的中间件

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

完美的工作,谢谢! – abierto

+0

另一种选择是将它放入单例中。 – Alex

0

您可以拥有一组凭据并尝试将输入与其中的任何人相匹配并验证。说实话,你可以轻松地用sqlite数据库来实现。它需要简单的设置,你可以在5分钟内开始使用它。

+0

这可能是他不能使用sqlite数据库的情况,因为那需要sqlite3。但我同意阵列方法,应该足够简单。 – oBo