我按照Firebase的指南介绍了如何使用Github进行身份验证。 https://firebase.google.com/docs/auth/web/github-auth
Firebase的signInWithRedirect方法的返回结果包含用户的 displayName 和电子邮件等。但是,它似乎不会出现包含用户' 登录' username是调用Github的大多数API调用的关键。
我相信有一种方法可以获得它,但我似乎无法找到任何文档。有谁碰巧知道如何解决它?
答案 0 :(得分:3)
我最终使用Github's API获取用户的accessToken用户名。
答案 1 :(得分:1)
您应该能够通过名为" username"的参数获取用户的GitHub用户名。 (详见:https://github.com/firebase/firebase-simple-login/blob/master/docs/v1/providers/github.md)
注意:firebase-simple-login于2014年10月3日弃用
答案 2 :(得分:0)
您可以使用从此GitHub's api
获取经过身份验证的用户或者,如果您使用octokit javascript rest api client,则可以执行以下操作
octokit = new Octokit({auth: userAccessToken })
octokit.users.getAuthenticated()
.then(result => {
console.log(result.data.login) // this is the username
})
注意:在GitHub <-> firebase登录之后,您将获得accessToken
希望这会有所帮助!
答案 3 :(得分:0)
您可以在 additionalUserInfo 中获取用户名:
const githubProvider = new firebaseClient.auth.GithubAuthProvider();
githubProvider.addScope('read:user');
githubProvider.setCustomParameters({
allow_signup: false,
});
firebaseClient.initializeApp(clientConfig);
async function submit() {
try {
const response = await firebaseClient
.auth()
.signInWithPopup(githubProvider);
console.log(response.additionalUserInfo);
} catch (error) {
alert(error);
}
}
答案 4 :(得分:-1)
您可以使用电子邮件进行授权请求插入用户名:
用户名:mayGitHubEmail@mail.com 密码:accessToken
以下是使用 Alamofire 和 SwiftyJSON pod 在 Swift 中使用类 func 的示例:
import Alamofire
import SwiftyJSON
enum NetworkError: Error {
case url
case server
case auth
}
class GistServices {
class func makePostApiCall(toUrl path: String, withBody parameters: JSON, usingCredentials: Bool = false) -> Result<Data?, NetworkError> {
guard let url = URL(string: path) else {
return .failure(.url)
}
if let email = UserAuthSingleton.shared.get(), let password = UserAuthSingleton.shared.getUserToken() {
var result: Result<Data?, NetworkError>!
var request = AF.request(url, method: .post, parameters: parameters)
if(usingCredentials){
let credentialData = "\(email):\(password)".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!
let base64Credentials = credentialData.base64EncodedString()
let headers = [HTTPHeader(name: "Authorization", value: "Basic \(base64Credentials)"),
HTTPHeader(name: "Accept", value: "application/json"),
HTTPHeader(name: "Content-Type", value: "application/json")]
request = AF.request(url, method: .post, parameters: parameters.dictionaryValue, encoder: JSONParameterEncoder.default, headers: HTTPHeaders(headers))
}
request
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.response { (response) in
switch response.result {
case .failure(_):
result = .failure(.server)
case .success(let value):
result = .success(value)
}
}
return result
}
return .failure(.auth)
}
}