如何通过REST api在ruby中进行身份验证

时间:2016-05-31 07:09:02

标签: firebase firebase-authentication

我正在尝试使用ruby将firebase作为服务帐户进行身份验证。 所以我到目前为止所做的就是像往常一样使用Google auth lib(在其他谷歌服务中):

require 'googleauth'
scopes =  ["https://www.googleapis.com/auth/firebase.database"]
tt = Google::Auth.get_application_default(scopes).fetch_access_token

我得到了tt [“access_token”],然后我做了类似

的事情

curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' 'https://project-xxxxxxxxxxxxxxxxxxx.firebaseio.com/message_list.json?access_token=ya29.CjHzAsjcGEQsSppI9AKCV9g4Uen7qlREI3N_nCGDsWkLh6ZSCg5JmNYzIU8NuV6PAq7h'

就像他们在https://firebase.google.com/docs/reference/rest/database/user-auth#section-get

中所说的那样

我得到: 权限被拒绝(这是因为在我们的数据库规则中我们说auth!= null。 所以我继续打电话给?auth=ya29.CjHzAsjcGEQsSppI9AKCV9g4Uen7qlREI3N_nCGDsWkLh6ZSCg5JmNYzIU8NuV6PAq7h

我得到了:

"{\n  \"error\" : \"Could not parse auth token.\"\n}\n"

我应该如何向Firebase使用nodejs进行身份验证...只是一个简单的REST ???

请协助!

谢谢!

1 个答案:

答案 0 :(得分:3)

这是一个完全出炉的例子,假设你有一个如上所述的访问令牌:

require 'cgi'
require 'json'
require 'net/https'
require 'uri'

ACCESS_TOKEN = 'XXX'
DATABASE_NAME = 'YYY'

path = '/example'
auth_variable = {uid: 'ruby-admin'}
payload = {my: 'data'}

uri = URI("https://#{DATABASE_NAME}.firebaseio.com#{path}.json?auth_variable_override=#{CGI::escape auth_variable.to_json}")
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')

req.body = payload.to_json
req['Authorization'] = "Bearer #{ACCESS_TOKEN}"

http = Net::HTTP.new(uri.hostname, uri.port)
http.use_ssl = true

res = http.request(req)

puts res.body

您可以修改auth_variable以更改安全规则中可用的auth变量,payload显然是您要发布的数据。