Laravel资源-用户访问权限

时间:2018-09-26 14:40:40

标签: laravel

我有一个使用Passport Laravel 5.5构建的API。

使用密码授予系统。

我有称为/ api / company / get / {id}和/ api / company / search的路由,它们将返回CompanyResource对象。这些路由不需要登录用户

在CompanyResource内部,我正在传递$ request。在资源内部,我需要根据登录用户如果存在来操纵如何返回数据 ...如果Auth :: user()-> is_special

因此,当我使用访问令牌Bearer调用/ api / company / get / {id}时,... 这将设置Auth对象供我使用吗??? Laravel文档显示正在访问https://laravel.com/docs/5.6/eloquent-resources#conditional-relationships

的Auth

在创建访问令牌(传递凭据)并制作带有或不带有它的api时-我想查看/访问已登录用户(如果存在)

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最佳实践,但我们实现了一个名为auth.optional的自定义中间件,该中间件扩展了常规auth.api中间件。当令牌无效或存在时,它基本上允许请求到实际端点,而不是抛出AuthException。

因为常规api中间件不允许请求中没有令牌,因此对无认证的终结点没有用。

use Illuminate\Auth\Middleware\Authenticate;

class OptionalAuthenticate extends Authenticate {
    public function handle($request, Closure $next, ...$guards) {
        try {
            $this->authenticate(array('api'));
        } catch(AuthenticationException $e) {
            //Do nothing
        }

        return $next($request);
    }
}

检查我们正在扩展的Authenticate类,以查看它在哪里抛出AuthenticationException。