Laravel 使用社交名将google令牌id进行身份验证
我收到了来自客户端android应用程序的Laravel 使用社交名将google令牌id进行身份验证,laravel,oauth-2.0,google-oauth,google-api-php-client,laravel-socialite,Laravel,Oauth 2.0,Google Oauth,Google Api Php Client,Laravel Socialite,我收到了来自客户端android应用程序的令牌id,该应用程序由谷歌生成。 如何使用社交名将用户授权? 我现在正在使用google_api客户端,但它没有Socialte的便利。如果你想获得用户信息,你必须使用accessToken(有时需要openid)来获得它,最近我制作了一个laravel包来满足这个请求,请检查这里: 如果您可以获得服务器身份验证代码,那么您可以将其交换为accessToken,并使用它查询Google+API 就我而言,我使用的是cordova库 这将为您(如果配置为
令牌id
,该应用程序由谷歌生成。如何使用社交名将用户授权?
我现在正在使用google_api客户端,但它没有Socialte的便利。如果你想获得用户信息,你必须使用accessToken(有时需要openid)来获得它,最近我制作了一个laravel包来满足这个请求,请检查这里:
如果您可以获得服务器身份验证代码,那么您可以将其交换为accessToken,并使用它查询Google+API 就我而言,我使用的是cordova库 这将为您(如果配置为“脱机”)提供一个
serverAuthCode
您可以将其发送到您的服务器。然后,要将其转换为accessToken,您可以调用此socialite方法:
$driver = Socialite::driver($provider); // provider is 'google' here
$access_token = $driver->getAccessToken($serverAuthCode);
然后,您可以使用此令牌获取用户信息:
$socialUser = $driver->userFromToken($access_token);
我只是想帮助那些正在为此而挣扎的人。使用PHP谷歌API客户端库 首先通过composer安装库 $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
}
有关更多详细信息,请查看
我有访问令牌,实际上我也用谷歌api验证过了,我现在如何获取信息?@Mehrdad,你检查过我的软件包吗?想法是客户端在oauth登录后获取访问令牌,然后将访问令牌传递给服务器端,通过我的软件包你可以获取用户信息。是的,tnx,但你知道,我已经在谷歌api中使用Sociait了。我不想依赖另一个库,因为我认为没有它也可以得到结果。干杯:)你想出解决办法了吗?如果是这样,请出于好奇分享,但是
serverAuthCode
也需要验证,不是吗?这是通过$driver->getAccessToken($serverAuthCode)
验证的,我倾向于这样认为,尽管我找不到任何文档来确认。此方法唯一的问题是“同意”屏幕将要求脱机权限,一些用户可能想知道这到底是怎么回事。对于较旧的版本,请使用getAccessTokenResponse
,@StevenM我正在按照您的建议做,但我收到一个401错误。奇怪的是,如果我从它工作的相同环境生成authCode(如果我从本地web生成authCode,它在本地web上工作;如果我从生产web生成authCode,它在生产web上工作)。顺便说一句,我使用的是旧版本,所以我使用@JuliSmz建议的getAccessTokenResponse