您好我一直在开发一款可让用户使用Google Books API搜索图书的应用。一切都很好,直到我想访问用户最喜欢的书籍,添加和删除它们。错误是关于授权。 google books api在这里说要访问最喜欢的书籍
获取https://www.googleapis.com/books/v1/mylibrary/bookshelves?key=yourAPIKey 授权:/ * auth token here * /
我正在做的是这个。
var userId: String?
if(UserStats.currentUser?.authentication.idToken != nil){
userId = UserStats.currentUser?.authentication.idToken
}
guard let id = userId else{
print("User Not authenticated")
return
}
print("USer ID : \(id)")
let theUrl = URL(string: "https://www.googleapis.com/books/v1/mylibrary/bookshelves?key=AIzaSyBIDJ50ak-caS3M-6nSVbxdN_SmssAlTRI)")
if let url = theUrl{
print("Search Called")
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.setValue(id, forHTTPHeaderField: "Authorization")
print("URL : " + url.absoluteString)
let task = URLSession.shared.dataTask(with: urlRequest, completionHandler: {
(data, response, error) in
if response != nil{
if let res = response as? HTTPURLResponse{
if(res.statusCode == 408)
{
MessageBox.Show(message: "Error : Request TimeOut", title: "Error", view: self)
}
}
}
if error != nil{
print("Error \(error?.localizedDescription)")
MessageBox.Show(message: (error?.localizedDescription)!, title: "An error occurred", view: self)
}
else{
do{
let jsonData = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print(jsonData)
}catch{
}
}
}
}
}
每次我运行代码时都会给我错误。错误在这里
{
error = {
code = 401;
errors = (
{
domain = global;
location = Authorization;
locationType = header;
message = "Invalid Credentials";
reason = authError;
}
);
message = "Invalid Credentials";
};
}
我正在使用Google登录sdk for iOS,以下是我尝试进行身份验证并成功完成的方法。
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().clientID = "1049478111900-4q2m623kj5m0fev7fbqq93tk7rgjvs2f.apps.googleusercontent.com"
GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/books")
GIDSignIn.sharedInstance().signIn()
登录成功,因为我看到成功登录后打印成功,并且我能够检索已登录用户的accessToken和idToken。 这是我打印的idToken。
已签名用户的ID令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6ImNiMDE1MDIxOWM5Y2NlZTBjY2Y3MDg2OTA4NmIxYjVmNGIzMGVmNWIifQ.eyJhenAiOiIxMDQ5NDc4MTExOTAwLTRxMm02MjNrajVtMGZldjdmYnFxOTN0azdyZ2p2czJmLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiYXVkIjoiMTA0OTQ3ODExMTkwMC00cTJtNjIza2o1bTBmZXY3ZmJxcTkzdGs3cmdqdnMyZi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInN1YiI6IjEwOTI5NDQ5ODE2OTA4NjY1OTU5NyIsImVtYWlsIjoic2FsbWFubWFqaWQxNEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiYXRfaGFzaCI6IlNMRzRoTGlrQXExZmQ2MnlnWklKR2ciLCJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJpYXQiOjE0OTMxMTE4NjAsImV4cCI6MTQ5MzExNTQ2MH0.Ct1aGjA6K8Vev_FmdjCj5hGJKyALY9jUcakbp4HSesarK8LHjEe2wZ1-8FR-FEyufIDTPENEkYpSXQRGYuHKXYmykNq6LMcRSWmR2JV8P5hDxwYPKcMwG4EgcvrEHncVBzjinn652mVHap6uBzwC4nvbpprpGKuglxZrqBKSobBthZnDitgyuMseWUq0lrfunNyA89g3KD9twjMMIDTMnP40u6if10T7P6JyedSoDgoOZ6rmhQOckovA1ery1rPl0zwvoRrbZ2GS_z-Zzz8ujhfyuxex-0yYExhVF09Gl4lvf5zySnSSbIGi6MIYaZC3W0-WaU4t0Hgho1kujl3ryw
请帮我解决这个问题。我整夜都在工作,无法解决这个问题。如果有更好的方法或者我可以解决这个问题,请告诉我。
答案 0 :(得分:2)
选项1:
URL(string: "https://www.googleapis.com/books/v1/mylibrary/bookshelves?access_token=YourToken)")
注意:密钥用于公共访问访问令牌是私有的,您只需要一个或其他
注2:您可以通过
进行测试https://www.googleapis.com/books/v1/mylibrary/bookshelves?access_token=YourToken
在任何网络浏览器中。
选项2:
标题应该是这样的
授权,Bearer accessToken
我认为你错过了持票人。
你不需要同时做这两件事都可以。
在“授权”请求标头中发送访问令牌时 由HTTP / 1.1 [RFC2617]定义的字段,客户端使用“承载” 用于传输访问令牌的身份验证方案。
授权:Bearer AccessToken