2017-02-09 105 views
0

我正在与laravel和lucadegasperi/oauth2-server-laravel一起使用密码隆重类型的项目。 一切工作正常,我所有的API端点都受到oauth2的保护。Laravel with OAuth2 issue

我只有一个API应该总是返回一个JSON数据响应,但是这个响应取决于用户是否登录。 而且,由于验证检查在中间件“OAuthExceptionHandlerMiddleware”正在处理中,如果用户没有停止请求记录并没有达到我的控制,我也得到如下回应:

{ 
    "error": "invalid_request", 
    "error_description": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed. Check the \"access token\" parameter." 
} 

我是什么希望实现的是能够处理我的控制器内的要求只有一个API端点:

  • 如果用户没有登录,返回正常响应+其它数据,而不是“无效的请求”的响应。
  • 如果用户登录,则返回正常响应。

谢谢你有关如何实现上述目标的任何帮助。

回答

0

到控制器内,而不是在中间件认证,我结束了起来做了以下内容:

use League\OAuth2\Server\Entity\AccessTokenEntity; 
use LucaDegasperi\OAuth2Server\Facades\Authorizer; 
use Illuminate\Http\Request; 

class ProductController extends Controller { 

    public function __construct(Request $request) { 
     $this->middleware('oauth', ['except' => ['index']]); 
    } 

    public function index(Request $request) { 
     Authorizer::setRequest($request); 
     $accessTokenString = Authorizer::getChecker()->determineAccessToken(true); 
     $accessToken = Authorizer::getChecker()->getAccessTokenStorage()->get($accessTokenString); 
     if ($accessToken instanceof AccessTokenEntity) { 
      echo "logged In with user_id = " . $accessToken->getSession()->getOwnerId(); 
      //return public products + products related to user 
     }else{ 
      echo "not logged in"; 
      //return public products 
     } 
    } 
} 
0

您可以向您的中间件添加例外以删除您的身份验证规则。

喜欢的东西

$this->middleware('auth', ['except' => array('getActivate', 'getLogin')]); 

看到Laracasts

+0

是的,这是一种选择,而是如果我添加一个异常,我不能检查用户是否登录或因为身份验证中间件不会触发,我正在寻找的是一种方法来执行我的控制器内的oauth2检查我找不到任何关于如何实现这个的例子 – fadz

+0

Auth应该仍然在会话中。 Auth :: user()没有做你需要的吗? –

+0

我向我的中间件添加了一个异常,并尝试了Auth :: user(),但是如果用户已登录并且用户未登录 – fadz