Lumen HTTP 基本认证

Posted

技术标签:

【中文标题】Lumen HTTP 基本认证【英文标题】:Lumen HTTP Basic Authentication 【发布时间】:2016-07-27 10:41:34 【问题描述】:

我正在尝试在 Lumen 项目中使用 Laravel 的 HTTP 基本身份验证。

routes.php 文件中,我为需要验证的路由设置了 auth.basic 中间件:

$app->get('/test', ['middleware' => 'auth.basic', function() 
    return "test stuff";
]);

bootstrap.php我已经注册了中间件和认证服务商:

$app->routeMiddleware([
    'auth.basic' =>  Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
]);

[...]

$app->register(App\Providers\AuthServiceProvider::class);

但是当我尝试通过访问http://lumen/test 来测试路线时,我收到以下错误:

Fatal error: Call to undefined method Illuminate\Auth\RequestGuard::basic() in C:\source\lumen\vendor\illuminate\auth\Middleware\AuthenticateWithBasicAuth.php on line 38

有谁知道我怎样才能获得基本认证的守卫代码?

谢谢。

【问题讨论】:

【参考方案1】:

遇到了类似的问题,想对数据库中的用户使用基本身份验证,所以最终编写了自己的 AuthServiceProvider 并在 bootstrap/app.php 中注册了它

这是课程,也许它会对你的情况有所帮助。

<?php

namespace App\Providers;

use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\ServiceProvider;

class HttpBasicAuthServiceProvider extends ServiceProvider

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    
        //
    

    /**
     * Boot the authentication services for the application.
     *
     * @return void
     */
    public function boot()
    
        $this->app['auth']->viaRequest('api', function ($request) 
            $email = $_SERVER['PHP_AUTH_USER'];
            $password = $_SERVER['PHP_AUTH_PW'];

            if ($email && $password) 
                $user = User::whereEmail($email)->first();
                if (Hash::check($password, $user->password)) 
                    return $user;
                
            

            return null;
        );
    

【讨论】:

以上是关于Lumen HTTP 基本认证的主要内容,如果未能解决你的问题,请参考以下文章

Lumen实现用户注册登录认证

HTTP协议之基本认证

在 Laravel 5 (Lumen) 中使用基本路径

HTTP基本认证

HTTP 基本认证(basic auth)和摘要认证(digest auth)区别

HTTP 基本认证(basic auth)和摘要认证(digest auth)区别