首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为api和Web使用单独的Passport

如何为api和Web使用单独的Passport
EN

Stack Overflow用户
提问于 2018-05-04 06:21:29
回答 2查看 106关注 0票数 0

有网络和api路由文件。Web路由由auth保护,未经身份验证的用户将被重定向到登录页面。但是我的要求是在api路由文件中。未经身份验证的api路由应该得到一个自定义的json响应,而不是重定向到登录页面。我对护照的功能很陌生。而且我不能更改Web路由,因为它是由其他开发人员制作的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-04 07:44:50

我更新了app/Exception/Handler.php方法的呈现方法,如下所示,它成功了。

代码语言:javascript
复制
    {

        if($exception instanceof \Illuminate\Auth\AuthenticationException && $request->is('api/v*'))
            {

                return Response(['success'=>-1,'statuscode'=>401,'msg'=>'Sorry, your account has been logged in from another device.'],401);
            }

                return parent::render($request, $exception);
    }
票数 0
EN

Stack Overflow用户

发布于 2018-05-04 07:30:07

当laravel请求未被授权(也称为“未经身份验证的api路由”)时,laravel抛出相同的异常,而不管它是web还是api路由。

但是,当应用程序处理/呈现异常时,响应由$request->expectsJson()确定,如果它的真响应返回为json,则它将充当web路由。

上面的函数检查多个函数,如果其中任何数目正确,则返回true:

  • 标头X-Requested-With === XMLHttpRequest
  • 标头Content-Type包含application/json
  • 标头Content-Type包含通配符(*/*)
  • 标头Accept包含application/json

确保您的api请求与上述任何一个标头匹配,在这种情况下,应该以json的形式返回身份验证错误。

要强制api路由始终抛出json身份验证错误,您可以执行以下任何操作:

  • 如果路由被确定为api路由,则重写服务提供程序中的请求头。(不要在中间件中尝试这一点,它可能无法工作)
  • 以与上述相同的方式覆盖异常处理程序
  • 当然,其他的情况也是可能的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50168414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档