我有一个使用 Passport 构建的 API,Laravel 5.5。
使用密码授予系统。
我有名为/api/company/get/{id} 和/api/company/search 的路由,它们将返回 CompanyResource 对象。这些路由不需要登录用户
在公司资源内部,我正在传递$request。在资源内部,我需要根据登录用户(如果存在(操作数据返回方式......如果身份验证::用户((->is_special
所以当我调用/api/company/get/{id} 时,使用访问令牌持有者...... 这会为我设置 Auth 对象以使用它吗???Laravel文档显示正在访问身份验证 https://laravel.com/docs/5.6/eloquent-resources#conditional-relationships
创建访问令牌(传递凭据(并使用它或不使用它制作 API 时 - 我想查看/访问登录的用户(如果存在(
我不知道这是否是最好的做法,但我们实现了一个名为auth.optional的自定义中间件,它扩展了常规auth.api中间件。它基本上允许请求到实际终结点,而不是在令牌无效或不存在时抛出 AuthException。
因为常规 api 中间件不允许请求没有令牌,因此它对免身份验证端点没有用。
use IlluminateAuthMiddlewareAuthenticate;
class OptionalAuthenticate extends Authenticate {
public function handle($request, Closure $next, ...$guards) {
try {
$this->authenticate(array('api'));
} catch(AuthenticationException $e) {
//Do nothing
}
return $next($request);
}
}
检查我们正在扩展的身份验证类,以查看它在何处引发身份验证异常。