bas*_*abi 6 php authentication basic-authentication laravel lumen
我正在使用Lumen创建RESTful API,并希望为安全性添加HTTP基本身份验证.
在routes.php文件中,它auth.basic为每个路径设置中间值:
$app->get('profile', ['middleware' => 'auth.basic', function() {
// logic here
}]);
Run Code Online (Sandbox Code Playgroud)
现在,当我访问时,我http://example-api.local/profile现在提示使用HTTP基本身份验证,这很好.但是当我尝试登录时,我收到以下错误消息:Fatal error: Class '\App\User' not found in C:\..\vendor\illuminate\auth\EloquentUserProvider.php on line 126
我不希望在数据库上完成用户验证,因为我只有一个凭证,所以很可能它只是获取变量的用户名和密码并从那里验证它.
顺便说一句,我通过这个laracast教程引用它.虽然它是一个Laravel应用程序教程,但我在Lumen应用程序上实现它.
bas*_*abi 13
我正在回答我自己的问题,因为我能够使其工作,但仍希望了解其他人对我的解决方案和正确的laravel方式的更多见解.
我能够通过创建一个这样做的自定义中间件来解决这个问题:
<?php
namespace App\Http\Middleware;
use Closure;
class HttpBasicAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$envs = [
'staging',
'production'
];
if(in_array(app()->environment(), $envs)) {
if($request->getUser() != env('API_USERNAME') || $request->getPassword() != env('API_PASSWORD')) {
$headers = array('WWW-Authenticate' => 'Basic');
return response('Unauthorized', 401, $headers);
}
}
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将查看代码,它是非常基本的并且运行良好.虽然我想知道是否有"Laravel"方式这样做,因为上面的代码是一个简单的PHP代码,它执行HTTP基本身份验证.
如果您注意到,用户名和密码的验证在.env文件上是硬编码的,因为我没有看到需要数据库访问进行验证.
| 归档时间: |
|
| 查看次数: |
10161 次 |
| 最近记录: |