lumen 用户认证

Lumen 中实现用户认证的配置文件位于config/auth.php

在底层代码中,Lumen 的认证组件由“guards”和“providers”组成,Guard 定义了用户在每个请求中如何实现认证,例如,Laravel 通过 session guard来维护 Session 存储的状态、Cookie 以及 token guard,token guard 是认证用户发送请求时带的“API token”。

Provider 定义了如何从持久化存储中获取用户信息,Lumen 底层支持通过 Eloquent 和数据库查询构建器两种方式来获取用户,如果需要的话,你还可以定义额外的 Provider。


通过 Auth 门面访问认证用户:

$user = Auth::user();

判断某个用户是否登录到应用,可以使用 Auth 门面的 check方法,如果用户通过认证则返回 true

if (Auth::check()) {
    // The user is logged in...
}
可以通过  Illuminate\Http\Request  实例访问认证用户:

if ($request->user()) {
            // $request->user() 返回认证用户实例...
        }


lumen 认证的流程:

bootstrap/app.php:
	$app->routeMiddleware([
     'auth' => App\Http\Middleware\Authenticate::class,
 ]);

如果用到中间件,生成auth factory的实例

App\Http\Middleware\Authenticate:
    public function __construct(Illuminate\Contracts\Auth\Factory $auth)
    {
        $this->auth = $auth;
    }
    public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            return response('Unauthorized.', 401);
        }


        return $next($request);
    }



authServiceProvider:
$app->register(App\Providers\AuthServiceProvider::class);
App\Providers\AuthServiceProvider:
    public function boot()
    {
        $this->app['auth']->viaRequest('api', function ($request) {
            if ($request->input('api_token')) {
                return User::where('api_token', $request->input('api_token'))->first();
            }
        });
    }
	注:$this->app['auth'] 为Illuminate\Auth\AuthManager实例:
		$app->$availableBindings = [
			'auth' => 'registerAuthBindings',
			'auth.driver' => 'registerAuthBindings',
			'Illuminate\Auth\AuthManager' => 'registerAuthBindings',
			......];
		
    Laravel\Lumen\Application:	
    protected function registerAuthBindings()
    {
        $this->singleton('auth', function () {
            return $this->loadComponent('auth', 'Illuminate\Auth\AuthServiceProvider', 'auth');
        });


        $this->singleton('auth.driver', function () {
            return $this->loadComponent('auth', 'Illuminate\Auth\AuthServiceProvider', 'auth.driver');
        });


        $this->singleton('Illuminate\Contracts\Auth\Access\Gate', function () {
            return $this->loadComponent('auth', 'Illuminate\Auth\AuthServiceProvider', 'Illuminate\Contracts\Auth\Access\Gate');
        });
   }
   protected function registerAuthenticator()
   {
        $this->app->singleton('auth', function ($app) {           
            $app['auth.loaded'] = true;


            return new AuthManager($app);
        });


        $this->app->singleton('auth.driver', function ($app) {
            return $app['auth']->guard();
        });
    }
    Illuminate\Auth\AuthManager:	
    public function guard($name = null)
    {
        $name = $name ?: $this->getDefaultDriver(); //$this->app['config']['auth.defaults.guard'] 即“api”


        return isset($this->guards[$name])
                    ? $this->guards[$name]
                    : $this->guards[$name] = $this->resolve($name);  // createSessionDriver 或 createTokenDriver
        }

   }



修改config/auth.php:

'defaults' => [
        'guard' => env('AUTH_GUARD', 'api'),
    ],
'guards' => [
        'api' => ['driver' => 'token', 'provider'=>'api'],
    ],
'providers' => [
         'api' => [ 'driver' => 'eloquent', 'model' => 'AppUser' ],
    ],




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值