【发布时间】:2021-02-07 19:36:59
【问题描述】:
我已经尝试了 3 天来完成这项工作,但我看不到我要去哪里。当尝试使用 firebase 提供的 - (void)getIDTokenWithCompletion: (nullable void (^)(NSString *_Nullable __strong, NSError *_Nullable __strong))completion; 函数获取 firebase tokenId 时,我没有得到任何回报。
我创建了一个单独的类来使用完成处理程序获取 Id。下面是我正在使用的代码
import Foundation
import FirebaseAuth
class FirebaseToken {
static var shared = FirebaseToken.init()
func getIdToken(token completion: @escaping(String?,Error?) -> Void){
Auth.auth().currentUser?.getIDToken(completion:{ idToken, error in
guard let error = error else {return }
print(error)
completion(nil, error)
guard let token = idToken else {return}
completion(token, nil)
print(token)
})
}
}
这是我用来调用func getIdToken 函数以获取ID 的类,它位于func makeAPICall<T:Codable>(urlPath: String, apiMethod: HTTPMethod, expectedReturnType: T.Type,user completionHandler: @escaping ([T]?,Error?) 函数内部。
import Foundation
import Alamofire
import Firebase
class ApiService {
static var shared = ApiService.init()
let session: Session = {
let manager = ServerTrustManager(allHostsMustBeEvaluated: false,evaluators: ["localhost": DisabledTrustEvaluator()])
let configuration = URLSessionConfiguration.af.default
return Session(configuration: configuration, serverTrustManager: manager)
}()
//MARK:- GET
func makeAPICall<T:Codable>(urlPath: String, apiMethod: HTTPMethod, expectedReturnType: T.Type,user completionHandler: @escaping ([T]?,Error?) -> Void) {
var urlComponent = URLComponents()
urlComponent.scheme = "https"
urlComponent.host = "localhost"
urlComponent.port = 5001
urlComponent.path = "/api/" + urlPath
print(urlComponent.url!)
guard let url = urlComponent.url else {
return
}
var headers: HTTPHeaders?
FirebaseToken.shared.getIdToken(token: {tokenId, error in
guard let errors = error else {return}
print(errors)
guard let tokens = tokenId else {return}
headers = [
.authorization(bearerToken: tokens),
.accept("application/json")
]
})
guard let headerAuth = headers else {
print("not getting firebase token")
return
}
print(headerAuth)
session.request(url, method: apiMethod).validate().responseDecodable(of: [T].self) {(response) in
switch response.result{
case .success:
guard let users = response.value else {
return
}
//print(header)
completionHandler(users, nil)
case .failure(let error):
completionHandler(nil, error)
}
}
}
}
函数内部的变量var headers: HTTPHeaders?
guard let headerAuth = headers else {
print("not getting firebase token")
return
}
应该打印出令牌,由于某种原因,令牌没有被添加。有人可以让我知道我哪里出了问题,因为我被困了 3 天,而且我对 firebase 还是很陌生?
打印结果应该在print(headerAuth)以内,但是;我不断在print("not getting firebase token") 内获得结果
【问题讨论】:
标签: swift firebase firebase-authentication