尽可能减少范围变更对用户的影响的步骤
- 如果您的应用需要经过身份验证的用户的电子邮件地址,而您之前已出于此目的使用
profile.emails.read
,请改用email
。 - 通过批准的验证请求,对
profile.emails.read
进行审批。请参阅如何提交以进行验证? - 在要移除的范围内,撤消之前的用户令牌,或彻底移除对应用的访问权限。例如,应撤消具有
profile.emails.read
访问权限的令牌。我们建议您在用户位于应用时应用撤消机制,以便立即征得用户同意。 - 提示用户重新同意使用新范围(例如
email
,而不使用profile.emails.read
)。 - 移除要逐步淘汰的 Google API OAuth 权限请求页面配置的范围。
将网站从 Google+ 登录功能迁移到 Google 时必须做出的更改 登录方式取决于您使用的 Google+ 登录流程。通常,迁移 您需要更新登录按钮、请求的范围和说明 了解如何从 Google 检索个人资料信息。
更新登录按钮时,请勿提及 G+ 或使用红色。 符合我们更新后的 品牌推广指南。
大多数 G+ 登录应用都会请求进行一些范围的组合:
plus.login
、plus.me
和plus.profile.emails.read
。您需要重新映射
如下:
旧范围 | 新范围 |
---|---|
plus.login |
profile |
plus.me |
openid |
plus.profile.emails.read |
email |
许多 Google+ 登录功能的实施者曾使用
代码流。这意味着
Android、iOS 或 JavaScript 应用从 Google 获取 OAuth 代码;以及
客户端会将该代码和跨网站请求一起发送回服务器
防欺诈。然后,服务器会验证代码并获取刷新信息,
访问令牌,从 people.get
API 提取用户个人资料信息。
Google 现在建议您请求一个 ID 令牌,并从 从客户端复制到服务器ID 令牌具有跨网站伪造防护 也可在服务器上进行静态验证,这样可以避免 额外的 API 调用从 Google 的服务器获取用户个人资料信息。按照 有关如何在服务器上验证 ID 令牌的说明。
如果您仍想使用代码流程获取个人资料信息,
可以这样做。服务器拥有访问令牌后,您需要
获取用户个人资料信息
从登录流程中指定的 userinfo
端点中
发现文档。API
回复的格式与 Google+ 个人资料回复不同,因此,
需要将解析更新为新格式。
迁移 HTML 登录按钮
如果您通过课程作业在页面上添加了 Google+ 登录按钮
g-signin
添加到元素中,请进行以下更改:
在
<meta>
标记中指定客户端 ID 时,data-
属性或参数对象,请将字符串clientid
更改为client_id
,如以下示例所示:<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
将
g-signin2
类分配给登录按钮元素,而不是将其分配给登录按钮元素g-signin
。此外,您应指定单独的成功和失败回调,而不是 单个回调,如以下示例所示:<!-- Google+ Sign-in (old) --> <div class="g-signin" data-callback="signinCallback"> </div>
<!-- Google Sign-in (new) --> <div class="g-signin2" data-onsuccess="onSignIn" data-onfailure="onSignInFailure"> </div>
您应定义成功和失败处理程序,而不是使用单个回调处理程序。 如以下示例中所示:
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
这些更改会将您的默认范围更新为
profile email openid
。 您可以获取用户的基本个人资料信息,例如姓名、电子邮件地址和照片 如下所示:// Google Sign-in (new) function onSignIn(googleUser) { let profile = googleUser.getBasicProfile(); let fullName = profile.getName(); let email = profile.getEmail(); let imageUrl = profile.getImageUrl(); }
迁移动态呈现的登录按钮
如果您通过调用
gapi.signin.render()
,请进行以下更改:
在
<meta>
标记中指定客户端 ID 时,data-
属性或参数对象,请将字符串clientid
更改为client_id
,如以下示例所示:<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
使用
gapi.signin2.render()
(而不是)呈现登录按钮gapi.signin.render()
,如以下示例所示:// Google+ Sign-in (old) gapi.signin.render('myButton', additionalParams);
// Google Sign-in (new) gapi.signin2.render('myButton', additionalParams);
您应定义成功和失败处理程序,而不是使用单个回调处理程序。 如以下示例中所示:
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
这些更改会将您的默认范围更新为 profile email openid
。您可以
使用 getBasicProfile()
方法获取用户的基本个人资料信息。
迁移 JavaScript 发起的登录流程
如果您在登录时调用 gapi.auth.signIn()
来启动登录流程,
点击登录按钮,然后进行以下更改:
在
<meta>
标记中指定客户端 ID 时,data-
属性或参数对象,请将字符串clientid
更改为client_id
,如以下示例所示:<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
点击按钮后,使用
gapi.auth2.attachClickHandler()
启动登录流程 ,如以下示例所示:// Google+ Sign-in (old) var signinButton = document.getElementById('signinButton'); signinButton.addEventListener('click', function() { gapi.auth.signIn(additionalParams); });
// Google Sign-in (new) auth2 = gapi.auth2.init(); auth2.attachClickHandler('signinButton', additionalParams, onSignIn, onSignInFailure);
您应定义成功和失败处理程序,而不是使用单个回调处理程序。 如以下示例中所示:
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
这些更改会将您的默认范围更新为 profile email openid
。您可以
通过调用 getBasicProfile()
获取用户的基本个人资料信息
方法。
迁移混合服务器端流
如果您之前使用 JavaScript API 获取了一次性授权代码 要传递给服务器,请进行以下更改:
将范围从
https://www.googleapis.com/auth/plus.login
更改为profile
。使用现有回调的
gapi.auth2.grantOfflineAccess()
方法 函数,如以下示例所示:<!-- Google+ Sign-in (old) --> <div class="g-signin" data-scope="https://www.googleapis.com/auth/plus.login" data-clientid="YOUR_CLIENT_ID" data-redirecturi="postmessage" data-accesstype="offline" data-callback="signInCallback"> </div>
// Google Sign-in (new) auth2 = gapi.auth2.init({ client_id: 'YOUR_CLIENT_ID', scope: 'profile' }); ... auth2.grantOfflineAccess().then(signInCallback);
如果您还需要访问用户的电子邮件,请将 email
添加到 scope 参数。