- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在使用 Google OAuth2 进行身份验证时遇到困难。
我从谷歌开发者控制台获得了客户端 ID 和密码,我想出了这段代码:
package main
import (
"fmt"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"io/ioutil"
"net/http"
"os"
)
const htmlIndex = `<html><body>
<a href="/GoogleLogin">Log in with Google</a>
</body></html>
`
func init() {
// Setup Google's example test keys
os.Setenv("CLIENT_ID", "somrestring-otherstring.apps.googleusercontent.com")
os.Setenv("SECRET_KEY", "alongcharachterjumble")
}
var (
googleOauthConfig = &oauth2.Config{
RedirectURL: "http://127.0.0.1:8080/auth", //defined in Google console
ClientID: os.Getenv("CLIENT_ID"),
ClientSecret: os.Getenv("SECRET_KEY"),
Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email"},
Endpoint: google.Endpoint,
}
// Some random string, random for each request
oauthStateString = "random"
)
func main() {
http.HandleFunc("/", handleMain)
http.HandleFunc("/GoogleLogin", handleGoogleLogin)
http.HandleFunc("/GoogleCallback", handleGoogleCallback)
fmt.Println(http.ListenAndServe(":8080", nil))
}
func handleMain(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, htmlIndex)
fmt.Println("another request made")
}
func handleGoogleLogin(w http.ResponseWriter, r *http.Request) {
url := googleOauthConfig.AuthCodeURL(oauthStateString)
http.Redirect(w, r, url, http.StatusTemporaryRedirect)
}
func handleGoogleCallback(w http.ResponseWriter, r *http.Request) {
state := r.FormValue("state")
if state != oauthStateString {
fmt.Printf("invalid oauth state, expected '%s', got '%s'\n", oauthStateString, state)
http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
return
}
code := r.FormValue("code")
token, err := googleOauthConfig.Exchange(oauth2.NoContext, code)
if err != nil {
fmt.Println("Code exchange failed with '%s'\n", err)
http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
return
}
response, err := http.Get("https://www.googleapis.com/oauth2/v2/userinfo?access_token=" + token.AccessToken)
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
fmt.Fprintf(w, "Content: %s\n", contents)
}
但我从谷歌得到这个错误:
- That’s an error.
Error: invalid_request
Missing required parameter: client_id
Learn more
Request Details client_id= redirect_uri=http://127.0.0.1:8080/auth response_type=code scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email state=random
这是怎么回事?我该如何解决?
最佳答案
错误信息表明ClientID
没有初始化。
这看起来与代码一致,因为 var
声明在 init
函数之前执行。
因此,当您的 var
请求 os.Getenv("CLIENT_ID")
时,该值为空白,因为 init
尚未执行。
来自文档:
A package with no imports is initialized by assigning initial values to all its package-level variables followed by calling all init functions in the order they appear in the source, possibly in multiple files, as presented to the compiler
https://golang.org/ref/spec#Package_initialization
要解决此问题,请将字符串直接放入 var
初始化中,或者在设置值后从 init
触发初始化。
喜欢:
var (
googleOauthConfig *oauth2.Config
)
func init() {
// init ENV
// initialize the variable using ENV values
googleOauthConfig = &oauth2.Config{ ... }
}
或者,您可以在执行实际的 Go 程序之前在操作系统级别设置那些 ENV
值。
关于go - 错误 : invalid_request Missing required parameter: client_id in golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932806/
我似乎找不到造成这种情况的原因。我一遍又一遍地检查该网址,但似乎找不到问题所在。 function setTime() { min = $("#minutes").val(); hour = $("s
我在尝试使用 google auth 提供程序时遇到奇怪的错误,它抛出 invalid_request const googleLogin = new firebase.auth.GoogleAuth
我在 iOS 应用程序中遇到了问题。 我必须获取全部 60 个 Google 位置。我创建了用于发送请求和解析结果的循环。在这个循环中,我创建了这样的 URL: if (nextPageToken !
我已经创建了一个带有应用客户端设置()的用户池和设置域,用于托管注册和登录Cognito本身中的页面。当我尝试使用类似于以下内容的网址时- https://myDomain.auth.us-east-
我有以下代码: if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position)
我已采取的步骤 使用 Google 的开发者控制台: 我已经创建了一个项目并为该项目创建了一个客户端。 我已激活 Youtube API 数据 我将回调设置为 http://localhost:300
在我的 Android 应用程序中,用户可以选择他想查看的地点的类别(咖啡馆、餐馆等)。 当我使用以下 url 时,我从带有 next_page_token 的 google-places-api 获
我有一个本地运行的基本 Jetty 服务器。如果我拉起 http://localhost/servlet1在桌面上的网络浏览器中,我能够看到正确的内容(基本 html 页面)。但是,当我在 Andro
代码如下: googleMapsAPICall = "https://maps.googleapis.com/maps/api/place/add/json?sensor=true&key=MY_KE
我在用户登录后尝试从应用程序文件夹中检索用户的完整文件名列表时遇到错误 400。 我正在使用本教程来设置 Dropbox SDK: https://www.dropbox.com/developers
我在 Appengine for Go 中使用拉队列,虽然本地租赁任务工作正常,但当我部署代码时,对 taskqueue.Lease 的调用给了我这个错误: API 错误 13(任务队列:INVALI
我想将我的应用与 Microsoft Graph 连接。我在 Azure 中创建了我的网络应用程序(我有我的 client_id 和 client_secret)。我可以发送请求以从 https://
在我使用完服务帐户后尝试撤销我的 gcloud 凭据时,我目前遇到了不一致的情况。 gcloud auth activate-service-account --key-file=mykey.json
我们使用 Google OAuth2 来验证我们的用户进入内部应用程序,使用 HybridAuth 2.4.0,直到大约一周前,我们开始看到越来越多来自 https://accounts.google
我尝试使用 Nuxt Auth 模块设置 google 身份验证,但我从 google 收到以下错误: Error 400 : invalid_request Parameter not allowe
我在使用 Adobe Sign 的 OAuth 身份验证时遇到问题——每次我尝试使用我的客户端 ID 和重定向 URI 获取访问 token 时,我都会收到以下消息: Unable to auth
我正在尝试为iOS的youtube应用获取访问 token 。这是我在viewDidLoad方法中一直使用的相关代码: mAuth = [[GTMOAuth2Authentication alloc]
我正在尝试使用以下 URL 获取应用程序的访问 token : https://datamarket.accesscontrol.windows.net/v2/OAuth2-13?grant_type
至少这个应该很容易让你验证。此请求返回 INVALID_REQUEST : https://maps.googleapis.com/maps/api/place/nearbysearch/json?l
问题:为什么 Google 返回 INVALID_REQUEST 响应?我猜这与请求的构造不正确有关。 (内容长度为“2”) public void addNewPlace(String latitu
我是一名优秀的程序员,十分优秀!