我正在尝试让 google plus 身份验证适用于网络应用程序,但不断收到 redirect_uri_mismatch 错误。我已经检查并重新检查我在代码和谷歌开发设置中是否有匹配的重定向 URL。
我已经标记了发生故障的位置 -> ** CRASHES HERE
任何帮助,将不胜感激。
js绑定
window.gplusSigninCallback = function(authResult) {
if (!authResult.code) {
return;
}
request
.post('/api/users')
.send({ code: authResult.code })
.end(function(err, res) {
dom('#signinButton').remove();
});
};
Run Code Online (Sandbox Code Playgroud)
谷歌+组件
<span id="signinButton">
<span class="g-signin"
data-scope="https://www.googleapis.com/auth/plus.login"
data-clientid="{clientId}"
data-redirecturi="postmessage"
data-accesstype="offline"
data-cookiepolicy="single_host_origin"
data-callback="gplusSigninCallback">
</span>
</span>
Run Code Online (Sandbox Code Playgroud)
发布/用户
使用来自https://github.com/google/google-api-nodejs-client/blob/master/examples/oauth2.js 的代码
'use strict';
const router = require('express').Router();
const User = require('../models/user');
const GoogleCreds = require('../config/google_api_credentials').web;
const googleapis = require('googleapis');
const OAuth2Client = googleapis.OAuth2Client;
module.exports = router;
/**
* …Run Code Online (Sandbox Code Playgroud) 我有一项服务已成功部署到Google Endpoints,可通过浏览器访问.
现在我正在尝试加载Google API javascript客户端库以使用javascript调用我的服务.
据我所知,我应该这样做
gapi.client.load([MY_APP_NAME], 'v1', function() {
var request = gapi.client.[API_NAME].[SERVICE_NAME].[METHOD]();
request.execute(function(jsonResp, rawResp) {...});
);
Run Code Online (Sandbox Code Playgroud)
但是我总是在运行时抱怨gapi.client时遇到异常.[MY_API_NAME]未定义.我对任何Google API(例如Plus)做同样的事情,它工作正常.例如,如果我加载'plus'API,我将可以访问gapi.client.plus ...我可以调用方法.
我错过了什么吗?所有示例和文档都是关于Google Service API的,我找不到自定义API(开发人员编写的API)的示例.
我甚至用不同的路径(绝对路径和相对路径)尝试了gapi.client.request但是我在"状态"中得到404 - Not Found错误.
var request = gapi.client.request({'path':
'https://[APP_NAME].appspot.com/_ah/api/[SERVICE_NAME]/v1/[METHOD]'
, 'method': 'GET'});
request.execute(function(jsonResp, rawResp) {...});
var request = gapi.client.request({
'path':'/[SERVICE_NAME]/v1/[METHOD]',
'method': 'GET'});
request.execute(function(jsonResp, rawResp) {...});
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Gmail Oauth。
当我用immediate:true调用这个函数时,它仍然在授权时显示弹出窗口。
请让我知道是否存在任何错误,以及任何替代方法。
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, callbackAuthResult);
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
function signin(getAuthStatus) {
gapi.auth.authorize({
'client_id': 'myID',
scope: 'email', immediate: true
},getAuthStatus);
}
function getAuthStatus() {
gapi.client.Myendpoint.MyEndpointMethod().execute(function (resp) {
console.log(resp);
}
Run Code Online (Sandbox Code Playgroud) javascript oauth-2.0 google-cloud-endpoints google-oauth google-api-js-client
我正在使用Google One-Tap登录来对用户进行身份验证,并且在对用户进行身份验证后,我会获得访问令牌。我知道我可以使用此访问令牌来与JavaScript的Google API客户端(“ GAPI”)一起使用。但是我找不到使用此访问令牌的GAPI使用任何方法。
假设我已经有一个登录用户,是否可以使用GAPI?
我想要做的是简单地通过一次点击身份验证进行身份验证并对用户日历进行一次同意之后,访问用户日历。
google-api google-api-js-client gapi google-identity google-api-javascript-client
我正在尝试实施增量授权我正在尝试在我的应用程序中使用 Google Oauth2
首先,当用户登录时,应用程序会请求一些范围和离线访问。我正在生成刷新令牌并将其存储在数据库中,以便我可以刷新访问令牌以在需要时进行 API 调用。
现在,我将实现一个新功能,该功能将请求新范围,但只有当用户尝试使用此新功能时,我才会请求此范围。
我面临的问题是,当应用程序提示用户同意新范围时,Google 正在请求访问所有先前接受的范围。
我尝试过在没有离线访问的情况下(使用“授予”方法),它似乎有效(正如描述中所说的“向用户请求额外的范围”)。这样做,谷歌只是请求新的范围,并且生成的访问令牌似乎工作正常。但如果我尝试离线访问(使用“grantOfflineAccess”方法),Google 会要求提供所有范围。如果我再次接受所有范围,它会返回一个授权代码,我可以再次生成刷新令牌,但我想只接受新范围。
我想知道在请求离线访问时也许无法做到这一点,因为您需要生成一个具有所有范围的新刷新令牌,但我找不到任何有关此的信息。
我是否做错了什么,或者是否无法通过离线访问来实现此目的?
更新:同样生成 URL(而不是使用 JS 库),如此处所述, Google 要求提供所有范围。这是生成的 URL 的示例:
https://accounts.google.com/o/oauth2/v2/auth?
scope=my_new_scope&
redirect_uri=https://myapp.example.com/callback&
response_type=code&
client_id=my_client_id&
prompt=consent&
include_granted_scopes=true
Run Code Online (Sandbox Code Playgroud)
UPDATE2:我在这里发现了一个报告的问题,有人评论说不可能对已安装的应用程序执行此操作。但有一条评论解释了如何使用 Web 服务器流执行此操作,这些是使用 OAuth2 Playground 的步骤(https://developers.google.com/oauthplayground):
1) 选择 Google 日历范围。
2) 授权访问
3)用代码交换令牌。
4) 向令牌信息端点发出请求: https://www.googleapis.com/oauth2/v2/tokeninfo?access_token = ...
5) 验证令牌是否仅包含 Google 日历范围。
6) 取消选择 Google Calendar 范围并选择 Google Drive 范围。
7) 在授权窗口中编辑 URL 并附加 &include_granted_scopes=true。
8) 授权Drive范围。
9) 将代码兑换为令牌。 …
oauth2-playground google-oauth google-api-js-client google-signin
所以我是新手,我想要做的是使用 Angular 作为前端来制作一个简单的按钮,当点击该按钮时会要求用户进行身份验证,就像使用 gmail 示例的任何登录一样,但我不断收到此错误,这是我的代码我想要做的是使用谷歌提供的代码 https://developers.google.com/gmail/api/v1/reference/users/messages/list 并将其转换为打字稿
app.component.ts
export class AppComponent {
async authenticate() {
return await gapi.auth2.getAuthInstance().signIn({
scope: 'https://www.googleapis.com/auth/gmail.readonly',
});
}
Run Code Online (Sandbox Code Playgroud)
应用程序组件.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<script src="https://apis.google.com/js/api.js"></script>
<title>Document</title>
</head>
<body>
<div class="wrapper">
<button class="signup" (click)="authenticate()">authorize and load</button>
</div>
<router-outlet></router-outlet>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) google-oauth ×2
javascript ×2
angular ×1
gapi ×1
google-api ×1
google-api-javascript-client ×1
node.js ×1
oauth-2.0 ×1
typescript ×1