Today i just started using Google Firebase, after finding out it could help my problem with quick data transfer between servers. I am trying to use Google Firebase to get data quickly from server to server, but ran into this problem when i tried using the module script for this. Apparently trying to call one of the functions to give data always led to an error.
I would very much appreciate it if someone with experience with Firebase could give their advice on how to solve this problem. And underneath this is both the script and module script i used.
Here is the Script that uses the module script:
local Data = require(script.Firebase) local Url = "https://project-siege.firebaseio.com/" Data.Init(Url) Data:Patch("users/4402987",{level = 9000, name = "astrallife"})
And here is the Module script itself: https://www.roblox.com/catalog/297221345/Rukiryos-Firebase-Module
I will still show the rest of the script here, for your convenience.
local module = {} --Written by Rukiryo -------------------------------------------------- --------------------EXAMPLES---------------------- -------------------------------------------------- --[[ Basic Initialization local data = require(game.Workspace.Firebase) local url = 'https://your-firebase-url.firebaseio.com/' data.Init(url) data.Authenticate("my secret token") -- Optional but recommended Adding data for somebody module.Put("users/4402987",{level = 5, age = 19, name = "Rukiryo"}) Deleting somebody's data module.Delete("users/4402987") Getting someone's data module.Get("users/4402987") You can put to any directory you want, even those that don't exist! module.Put("newsubtable/tableitem",{value = 5}) ]] -------------------------------------------------- ----------------------API------------------------- -------------------------------------------------- --[[ INIT void Init (string url) --Give the module a string to append before each request. If you wish to manually enter the url each time, do not call Init. AUTHENTICATE void Authenticate(string key) --Appends a key to the end of requests. The key should be your security token. Read the Security section below for more. POST table Post(string path, table data, string header = "") --Posts data. Returns data written (for verification). Post overwrites any info. Returns name of data put: { "name": "-INOQPH-aV_psbk3ZXEX" } If you do not wish to receive a weird string, use PUT. PUT table Put(string path, table data) --Puts data. Data will be overwritten at the path specified. All names will be set as you specify, no weird string. Returns table containing information put (for verification) GET table Get(string path) --Gets data. Returns requested data. PATCH table Patch(string path, table data) --Patches data. Lets you update children without erasing content you do not mention. Creates new children that didn't exist previously. DELETE void Delete(string path) --Deletes the specified path. ]] -------------------------------------------------- ------------------Security------------------------ -------------------------------------------------- --[[ For help setting up security, visit https://www.firebase.com/docs/security/quickstart.html If your wish to use my module's built in security, I've written a basic passworded protection code snippet. This snippet will protect your entire database under a "Secret" token. This is available in your database. This security rule will allow your data to be posted to / read only with an authentication key. [code starts here] { "rules": { ".read": "auth != null && auth == 'YOUR SECRET TOKEN HERE'", ".write": "auth != null && auth == 'YOUR SECRET TOKEN HERE'" } } [code ends here. do not paste these tags] ]] -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- module.url = "" module.http = nil module.auth = "" module.Init = function(u) module.url = u module.http = game:GetService("HttpService") end module.Authenticate = function(key) module.auth = key end module.Post = function(path, data, header) if header == nil then header = "" end local jData = module.http:JSONEncode(data) local finalPath = module.AuthKey(module.url..path..".json"..header) --print(finalPath) return module.http:PostAsync(finalPath, jData) end module.Get = function(path) local sendData = module.AuthKey(module.url..path..".json") --print(sendData) local gottenData = module.http:GetAsync(sendData) --print(gottenData) if gottenData ~= "null" then return module.http:JSONDecode(gottenData) end return nil end module.Put = function(path, data) return module.Post(path, data, "?x-http-method-override=PUT") end module.Patch = function(path, data) return module.Post(path, data, "?x-http-method-override=PATCH") end module.Delete = function(path) return module.http:PostAsync(module.AuthKey(module.url..path..".json?x-http-method-override=DELETE"), module.http:JSONEncode({})) end module.AuthKey = function(str) if module.auth == "" then return str end if str.find(str, "?") ~= nil then return str.."&auth="..module.auth else return str.."?auth="..module.auth end end return module