Angular ng2-ui-auth和Lumen Socialite不匹配请求POST

时间:2018-05-19 20:15:36

标签: angular lumen laravel-socialite satellizer

ng2-ui-auth是这样配置的

Ng2UiAuthModule.forRoot({
  baseUrl:'http://localhost:8000',
  loginUrl: '/api/auth/login',
  providers: {
    google: {
      clientId: '....',
      url: '/api/auth/google'
    }
  }
})

将会话数据发送到服务器时,这是POST有效负载

{
"authorizationData": {
    //the same data sent to the auth endpoint
},
"oauthData": {
    //the data received from the oauth endpoint
},
"userData": {
    //additional data you've provided
}

}

,如8.0.0 ng2-ui-auth changelog

然而,在Lumen框架中,Socialite期望对象根目录中的字段coderedirect_uri,否则会引发以下错误

  

{“message”:“客户端错误:POST https:\/\/accounts.google.com\/o\/oauth2\/token导致400 Bad Request响应:\ n {\ n \”错误\“:\”invalid_request \“,\ n \”error_description \ “:\”缺少必需参数:代码\“\ n} \ n”,“代码”:400,“status_code”:500}

我在文档中找不到任何内容。

我错过了一些配置吗?有人解决了这个问题吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

这个问题已经很久了,但是这个解决方案可能会帮助遇到这个问题的其他人。

这是我们在Lumen API方面所做的事情:

// Due to the changes in ng2-ui-auth (Angular) we set the fiels to the right place
if (!$request->has('code'))
    $request->request->add(['code' => $request->input('oauthData.code')]);
if (!$request->has('redirect_uri'))
    $request->request->add(['redirect_uri' => $request->input('authorizationData.redirect_uri')]);

// Retrieve the redirectUri
$redirectUri = $request->has('redirectUri') ? $request->get('redirectUri') : $request->get('redirect_uri');

// Inits using the google (stateless) driver
$provider = Socialite::with('google');
$provider->redirectUrl($redirectUri);
$provider->stateless();

实际上发生的是,使用新的ng2-ui-auth(v8 +)时,代码和redirect_uri更改了位置。因此,在这里,我们只是将它们放在正确的位置(以防万一它不再更改),并且还要确保它可以与旧版本一起使用。当然,不要忘记保持stateless(),因为流明不能处理会话。