gpt4 book ai didi

ios - Swift iOS - 如何将 Firebase token 发送到 Heroku 上的 Https URL?

转载 作者:行者123 更新时间:2023-11-28 15:14:40 29 4
gpt4 key购买 nike

我正在使用 Algolia 在我的 Firebase 数据库上运行我的搜索请求。我将 Algolia 托管在带有 Node.js 文件的 Heroku 服务器上。 Algolia 通过该 Node.js app.js 文件连接到 Firebase。

为了让 Firebase 对 Algolia 进行身份验证,我需要一个 token ,该 token 是我在用户登录并在客户端上进行身份验证后生成的。

Firebase 文档说通过 Https 将 token 发送到我的后端-

Firebase: Get Tokens and Send to Https

我在 Stackoverflow 上发现了一个类似的问题,但它没有给出任何代码来说明如何去做。我不是 Node.js 开发人员,只是略微研究了一下,所以我需要更多上下文

How to send Firebase token to backend?

在我在下面创建的函数中 func sendTokenToHerokuAppJsFile() 我可以在创建 token 后发送它。然后我可以使用 url(它是函数内的第二行)将 token 发送到,但我不知道从哪里获取 url。

如何获取将 token 发送到我的 Heroku app.js 文件的 URL?

更新:@Freya 在评论中非常有帮助地建议我在 Node 端创建一个 api,但我不是 Node 开发人员

如何在 Node.js 中创建 API 来接收 token ?

iOS 客户端 Swift 文件:

@IBAction fileprivate func signinButtonTapped(_ sender: UIButton) {

Auth.auth().signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: {
(user, error) in

if error != nil {
return
}

guard let currentUser = user else {
return
}

currentUser?.getIDTokenForcingRefresh(true, completion: {
(idToken, error) in

if error != nil{
return
}

// Send token to your backend via HTTPS
self.sendTokenToHerokuAppJsFile(idToken)
})
}
}

fileprivate func sendTokenToHerokuAppJsFile(_ idToken: String){

let json: [String:Any] = ["token" : idToken]

// HOW DO I GET THIS URL??
let url = URL(string: "https://www.linkToMyHerokuAppJsFile")

var request = URLRequest(url: url!)
request.httpMethod = "POST"

do {
request.httpBody = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
}catch let error as NSError{
print(error.localizedDescription)
return
}

let task = URLSession.shared.dataTask(with: request) {
(data, response, error) in

guard let data = data, error == nil else{
//do something
return
}

do{
let result = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any]
print(result as Any)

}catch let error{
print(error.localizedDescription)
}
}
task.resume()
}

Heroku App.Js 服务器文件:

var idToken;     

//Firebase-Admin Initialization
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: "********",
clientEmail: "********",
privateKey: "-----BEGIN PRIVATE KEY-----\n********\n-----END PRIVATE KEY-----\n"
}),
databaseURL: "https://********.firebaseio.com/"
});

//Firebase Initialization
var firebase = require('firebase');
var config = {
apiKey: "********",
authDomain: "********.firebaseapp.com",
databaseURL: "https://********.firebaseio.com/",
storageBucket: "********.appspot.com",
messagingSenderId: "********"
};
firebase.initializeApp(config);

admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
firebase.auth().authenticateWithCustomToken(uid)
}).catch(function(error) {
// Handle error
});

//Algolia Initialization
var algoliasearch = require('algoliasearch');
var algolia = algoliasearch('********', '********');

最佳答案

我无法测试整个 Node js 代码,但这里是一个开始:

首先安装express并保存在package.json中的模块列表中:

npm install express --save

var express = require('express'); //include express
var app = express(); //create your app
var idToken;

//Firebase-Admin Initialization
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: "********",
clientEmail: "********",
privateKey: "-----BEGIN PRIVATE KEY-----\n********\n-----END PRIVATE KEY-----\n"
}),
databaseURL: "https://********.firebaseio.com/"
});

//Firebase Initialization
var firebase = require('firebase');
var config = {
apiKey: "********",
authDomain: "********.firebaseapp.com",
databaseURL: "https://********.firebaseio.com/",
storageBucket: "********.appspot.com",
messagingSenderId: "********"
};
firebase.initializeApp(config);

//here you expose the logic of token verification. From my experience, do not include the initialization (former line), or it will initialize firebase app every time you make the request
app.post('/verify_token', function (req, res) {
var idtoken = req.body.firebase_token;
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;
firebase.auth().authenticateWithCustomToken(uid)
}).catch(function(error) {
// Handle error
});
})


//Algolia Initialization
var algoliasearch = require('algoliasearch');
var algolia = algoliasearch('********', '********');

假设 Node 服务器的 url 是 http://mynodeserver.com .您可以通过 http://mynodeserver.com/verify_token 访问此 API ,使用 post 作为 http 方法,发送 firebase_token 作为 body 参数。我理解的速度不够快,无法编写有效的代码,并且肯定会有变体来做到这一点,但本质几乎是一样的。

基于此链接:https://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm

关于ios - Swift iOS - 如何将 Firebase token 发送到 Heroku 上的 Https URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com