- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在尝试从 Google 获取 oAuth token 时遇到“redirect_uri_mismatch”错误:
[client 127.0.0.1:49892] {\n "error" : "redirect_uri_mismatch"\n}, referer: `http://localhost/oAuth/chess-login.html`
使用了两个文件:chess-login.html 和 plus.php(代码如下)。
Google API 具有以下 URI:
http://localhost/oAuth/chess-login.html
谁能指出解决方案?
plus.php:
<?php
$client_id = "XXX.apps.googleusercontent.com"; //your client id
$client_secret = "XXX"; //your client secret
$redirect_uri = "http://localhost/chess-login.html";
$scope = "https://www.googleapis.com/auth/plus.login"; //google scope to access
$state = "profile"; //optional
$access_type = "offline"; //optional - allows for retrieval of refresh_token for offline access
if(isset($_POST['results'])){
$_SESSION['accessToken'] = get_oauth2_token($_POST['results']);
}
//returns session token for calls to API using oauth 2.0
function get_oauth2_token($code) {
global $client_id;
global $client_secret;
global $redirect_uri;
$oauth2token_url = "https://accounts.google.com/o/oauth2/token";
$clienttoken_post = array(
"code" => $code,
"client_id" => $client_id,
"client_secret" => $client_secret,
"redirect_uri" => $redirect_uri,
"grant_type" => "authorization_code"
);
$curl = curl_init($oauth2token_url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clienttoken_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$json_response = curl_exec($curl);
error_log($json_response);
curl_close($curl);
$authObj = json_decode($json_response);
if (isset($authObj->refresh_token)){
//refresh token only granted on first authorization for offline access
//save to db for future use (db saving not included in example)
global $refreshToken;
$refreshToken = $authObj->refresh_token;
}
$accessToken = $authObj->access_token;
return $accessToken;
}
?>
chess-login.html:
<!DOCTYPE html>
<html>
<html itemscope itemtype="http://schema.org/Article">
<head>
<!-- BEGIN Pre-requisites -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
(function () {
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://plus.google.com/js/client:plusone.js?onload=start';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
</script>
<!-- END Pre-requisites -->
</head>
<body>
<div id="signinButton">
<span class="g-signin"
data-scope="https://www.googleapis.com/auth/plus.login"
data-clientid="XXX.apps.googleusercontent.com"
data-redirecturi="postmessage"
data-accesstype="offline"
data-cookiepolicy="single_host_origin"
data-callback="signInCallback">
</span>
</div>
<div id="result"></div>
<p id="onSignInText"></p>
</body>
<!-- Last part of BODY element in file index.html -->
<script type="text/javascript">
function signInCallback(authResult) {
if (authResult['code']) {
// Hide the sign-in button now that the user is authorized, for example:
$('#signinButton').attr('style', 'display: none');
//document.getElementById("onSignInText").innerHTML = "Sign in successful";
$.post("plus.php", {results: authResult['code']},
function(data){alert(data); });
// Send the code to the server
$.ajax({
type: 'POST',
url: 'plus.php?storeToken',
contentType: 'application/octet-stream; charset=utf-8',
success: function(result) {
// Handle or verify the server response if necessary.
// Prints the list of people that the user has allowed the app to know
// to the console.
console.log(result);
if (result['profile'] && result['people']){
$('#results').html('Hello ' + result['profile']['displayName'] + '. You successfully made a server side call to people.get and people.list');
} else {
$('#results').html('Failed to make a server-side call. Check your configuration and console.');
}
},
processData: false,
data: authResult['code']
});
} else if (authResult['error']) {
// There was an error.
// Possible error codes:
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatially log in the user
// console.log('There was an error: ' + authResult['error']);
}
}
</script>
</html>
最佳答案
您应该在服务器中设置 redirect_uri
以匹配客户端中的 data-redirecturi="postmessage"
(您的流程不需要 重定向,因此不会使用来自 Google API 控制台的值...)
. . .
$clienttoken_post = array(
"code" => $code,
"client_id" => $client_id,
"client_secret" => $client_secret,
"redirect_uri" => "postmessage", // <== Change here!
"grant_type" => "authorization_code"
);
. . .
关于php - 谷歌 oAuth : redirect_uri_mismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24750000/
我正在使用 oauth2 gem 进行谷歌登录验证。我的代码看起来像 omniauth.rb OmniAuth.config.logger = Rails.logger require "omniau
我在 Visual Studio Express 2012 for Web 中有一个网站。 当我尝试以下代码时,我不断收到来自 google 的错误,提示开发者控制台中列出的重定向 uri 不匹配:
无法登录到 firebase CLI。 firebase login 在浏览器中生成如下错误提示: The redirect URI in the request, http://localhost:
我们在尝试从 Google 获取 oAuth token 时遇到“redirect_uri_mismatch”错误: [client 127.0.0.1:49892] {\n "error" : "
我正在尝试使用 socialite 登录 google,我的 facebook 登录工作正常,所以我的 google 应用程序出现问题,任何帮助!!! 'google' => [ 'clie
我已经在我的应用程序中集成了用于登录的google ios SDK,并能够使用该SDK生成授权代码。尝试在服务器端使用相同的授权代码时,我不断收到redirect_uri_mismatch错误。在Go
我正在尝试遵循本指南:Using OAuth 2.0 for Installed Applications 我通过了第一部分,用户可以授权我的应用访问他们的 Google Drive。用户授予权限后,
尝试在我的网站上实现 hybridauth 2.4,除了 config.php 之外的所有代码都是开箱即用的,但我在使用 Google+ 时遇到了问题。我已经尝试了一切,并且正在慢慢失去它。 400
尝试使用 github api 时,我不断收到相同的 OAuth 错误。有时它会消失,但大多数时候它会留下。我曾尝试重置我的 key ,撤销所有 token ,清除 safari 缓存但没有运气。这是
我正在尝试通过分析 API 从 R 连接到谷歌分析。以下是我的代码。 library(RGoogleAnalytics) oauth_token <- Auth(client.id = "client
URL似乎正确(昨天最后更新了它们): 这些文件也是: omniauth.rb: provider :google_oauth2, 'MY_CLIENT_ID.apps.googleusercon
我关注了这个basic tutorial ,但我得到: Eroare:redirect_uri_mismatchThe redirect URI in the request: urn:ietf:wg
我在具有Google Play排行榜支持的Unity中创建了一个应用。我可以轻松地使其在Android上运行,然后我也转向OSX来为iPhone构建它。 首先我遇到一个问题,苹果不接受任何带有'_'字
我正在尝试在我的系统中实现一次性代码登录流程。应用包含两部分:1)向Google+请求一次性授权码的Android应用2)Rails 服务器在请求 header 中从 android 应用程序接收一次
我想编辑在 Google API 控制台中注册的用于 Google+ 登录的包 ID。 回答这个 question告诉我如何做到这一点,但我没有看到 API Access 下的 Client id 和
我正在尝试让 google plus 身份验证适用于网络应用程序,但不断出现 redirect_uri_mismatch 错误。我检查并重新检查了我在代码和谷歌开发设置中是否有匹配的重定向 url。
全部, 我在尝试通过 google 进行身份验证时收到 400 redirect_url_mismatch 错误。我通过 django 应用程序使用 python-socal-auth 来实现这个过程
我们根据此文档构建我们的 Web 应用程序并与 Google OAuth2 集成 Google Identity Services JavaScript SDK 我们想使用“popup”模式,但是当试
我遵循了这个 Gmail API Python 快速入门教程: https://developers.google.com/gmail/api/quickstart/python 我按照说明在 API
我正在尝试连接到 google drive,为此我正在使用 python pydrive 库。我已经按照文档编写了一个片段来连接谷歌驱动器。但我收到一个错误 错误:redirect_uri_misma
我是一名优秀的程序员,十分优秀!