我正在 android
中生成服务器 auth 代码gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
.requestServerAuthCode(getString(R.string.server_client_id), false)
.build();
然后我试图获得这样的服务器授权代码。
result.requestServerAuthCode(getString(R.string.server_client_id), false)
假设我有一个像#bla; bla bla bla&#39 ;;
这样的身份验证令牌然后使用laravel socialite我试图让用户在服务器端
Socialize::driver('google')->userFromToken('bla bla bla')
它显示错误
GuzzleHttp \ Exception \ ClientException,带有消息'客户端错误:GET https://www.googleapis.com/plus/v1/people/me?prettyPrint=false导致401 Unauthorized`响应: {"错误" {"错误":[{"结构域":"全球""理由":& #34; authError","消息":"无效的凭证"," locationType":"标题"," loc (截...)
答案 0 :(得分:2)
实际上谷歌在Android上发送的代码不是获取访问令牌的访问令牌,你可以在laravel控制器上执行此操作。
安装此作曲家库https://github.com/pulkitjalan/google-apiclient
$client = new \PulkitJalan\Google\Client(['client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_SECRET', 'redirect_uri' => 'YOUR_REDIRECT_URI', 'developer_key' => 'YOUR_KEY']);
$google = $client->getClient();
$google->authenticate($token);
$access_token = $client->getAccessToken()["access_token"];
//and now here you go
$user = Socialize::driver('google')->userFromToken($access_token);
答案 1 :(得分:1)
最简单的方法是使用Google提供的Google_Client类。你可以找到它here
现在,你有两个选择:
您可以将 backend_auth_code 发送到服务器而不是 id_token ,然后使用方法 fetchAccessTokenWithAuthCode($ code)< Google_Client类的/ em> 。这为您提供了访问令牌,ID令牌和其他内容。然后,您可以将 access_token 与Laravel Socialite
一起使用$client = new Google_Client([
'client_id' => config('services.google.client_id'),
'client_secret' => config('services.google.client_secret')
]);
$data = $client->fetchAccessTokenWithAuthCode($code);
$user = Socialite::driver('google')->scopes(['profile','email'])->userFromToken($data['access_token']);