我有一个使用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时-我想查看/访问已登录用户(如果存在)
答案 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。