使用Firebase的Github OAuth - 如何获取用户的用户名

时间:2016-12-13 07:25:05

标签: firebase oauth-2.0 firebase-authentication

我按照Firebase的指南介绍了如何使用Github进行身份验证。 https://firebase.google.com/docs/auth/web/github-auth

Firebase的signInWithRedirect方法的返回结果包含用户的 displayName 电子邮件等。但是,它似乎不会出现包含用户' 登录' username是调用Github的大多数API调用的关键。

我相信有一种方法可以获得它,但我似乎无法找到任何文档。有谁碰巧知道如何解决它?

5 个答案:

答案 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

like this with Postman

body sent

以下是使用 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)
    }
}