我已经从谷歌生成的客户端Android应用程序中收到了token-id
如何使用社交名媛授权用户?
我现在正在使用google_api客户端,但它没有Socialte的便利。
答案 0 :(得分:3)
使用PHP Google API客户端库
首先通过composer安装库
$作曲家需要google / apiclient
$client = new Google_Client(['client_id' => env('Google_CLIENT_ID')]); // Specify the CLIENT_ID of the app that accesses the backend
$payload = $client->verifyIdToken($id_token);
if ($payload) {
$userid = $payload['sub'];
// If request specified a G Suite domain:
//$domain = $payload['hd'];
} else {
// Invalid ID token
}
有关更多详细信息,请检查
https://developers.google.com/identity/sign-in/android/backend-auth?authuser=2
答案 1 :(得分:0)
如果您想获取userinfo,您必须使用accessToken(有时需要openid)来获取它,最近我制作了一个laravel包来满足此请求,请点击此处:
答案 2 :(得分:0)
如果您可以获取服务器验证码,则可以将其换成accessToken,并使用它来查询Google+ API。
在我的情况下,我使用的是cordova库
https://github.com/EddyVerbruggen/cordova-plugin-googleplus
这将为您提供(如果配置为“离线”)serverAuthCode
您可以将其发送到您的服务器。然后,要将其转换为accessToken,您可以调用此社交方法:
$driver = Socialite::driver($provider); // provider is 'google' here
$access_token = $driver->getAccessToken($serverAuthCode);
然后您可以使用此令牌获取用户信息:
$socialUser = $driver->userFromToken($access_token);
只是想帮助那些正在努力解决这个问题的人。
答案 3 :(得分:-1)
您不需要google_api依赖项。只需更改Socialite类中的URI,这有助于从Google帐户中检索个人资料信息。
1)转到供应商 - > laravel - >社交名媛 - > src - >二 - > GoogleProvider.php类
2)通过替换以下URL
来更改getUserByToken函数protected function getUserByToken($token) {
$response = $this->getHttpClient()->get('https://www.googleapis.com/oauth2/v3/tokeninfo?', [
'query' => [
'id_token' => $token,
],
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$token,
],
]);
return json_decode($response->getBody(), true);
}
3)分配以下值,谷歌将这些值返回到您的自定义对象或您需要继续进行的任何操作
protected function mapUserToObject(array $user)
{
return (new User)->setRaw($user)->map([
'id' => $user['kid'], 'nickname' => Arr::get($user, 'given_name'), 'name' => $user['name'],
'email' => $user['email'], 'avatar' => Arr::get($user, 'picture'),
'avatar_original' => preg_replace('/\?sz=([0-9]+)/', '', Arr::get($user, 'picture')),
]);
}