如何为Api和Web使用Separate Passport api

时间:2018-05-04 06:21:30

标签: laravel

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

2 个答案:

答案 0 :(得分:0)

当laravel请求未被授权(也称为“未经验证的api路由”)时,无论是web还是api路由,laravel都会抛出相同的异常。

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

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

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

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

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

    如果确定路由是api路由,则
  • 覆盖服务提供者中的请求头。 (不要在中间件中尝试这个,它可能不起作用)
  • 以与上述相同的方式覆盖异常处理程序
  • 当然还有其他方案

答案 1 :(得分:0)

我将app / Exception / Handler.php方法的渲染方法更新为如下,并且有效。

    {

        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);
    }