How to create a webservice for a login system?

2019-08-11 07:56发布

问题:

I was wondering if it was possible to create a login system using a webservice as I need to add a login system in my app in Smartface App Studio?

Thanks

回答1:



Yes, it's possible.
One of the possible solutions is to get the user's information from a server and compare the password that the user typed and the one that came from the server, if it's equal, log in. I personally use Firebase as my server, so I save user's object name as his email, so every time I want to get this user's object, I make a GET request with his email in the URL.
Eg.

var webclient = new SMF.Net.WebClient({
  URL : "https://exampleapp.firebaseio.com/Users/example@example.com",
  httpMethod : "GET",
  ...
  onSyndicationSuccess : function(e){
    var response = JSON.parse(e.responseText);
    if(response.password === Pages.Page1.UserPassword.text){
      //Login
    } else {
      alert("Wrong Password!");
    }
  }
});

Hope that helps! :)


EDIT

var ROOT_URL = "https://exampleapp.firebaseio.com/"; //Change to your Firebase App
var FIREBASE_CREDENTIAL = "yourAppSecret"; //Change to your Firebase App Secret

var firebase = {
    register : function (email, password, callback) {
        var emailReplace = email.replace(/\./g, ",");
        var beginRegister = function () {
            requestObj = {
                "email" : email,
                "password" : password
            };
            var requestJSON = JSON.stringify(requestObj);
            var wcRegister = new SMF.Net.WebClient({
                    URL : ROOT_URL + "Users/" + emailReplace + ".json?auth=" + FIREBASE_CREDENTIAL,
                    httpMethod : "POST",
                    requestHeaders : ['Content-Type:application/json', 'X-HTTP-Method-Override:PATCH'],
                    requestBody : requestJSON,
                    onSyndicationSuccess : function (e) {
                        //Registered, do something
                        callback();
                    },
                    onServerError : function (e) {
                        //Do something
                    }
                });
            wcRegister.run(true);
        };
        var isTaken = new SMF.Net.WebClient({
                URL : ROOT_URL + "Users/" + emailReplace + ".json?auth=" + FIREBASE_CREDENTIAL,
                httpMethod : "GET",
                requestHeaders : ["Content-Type:application/json"],
                onSyndicationSuccess : function (e) {
                    var response = JSON.parse(isTaken.responseText);
                    if (response !== null) {
                        //Email is taken, do something
                    } else {
                        beginRegister(); //Email is not taken, continue
                    }
                },
                onServerError : function (e) {
                    //Server Error, do something
                }
            });
        isTaken.run(true);
    },
    login : function (email, password, callback) {
        var emailReplace = email.replace(/\./g, "%2C");
        var wcLogin = new SMF.Net.WebClient({
                URL : ROOT_URL + "Users/" + emailReplace + ".json?auth=" + FIREBASE_CREDENTIAL,
                httpMethod : "GET",
                requestHeaders : ["Content-Type:application/json"],
                onSyndicationSuccess : function (e) {
                    var responseText = JSON.parse(wcLogin.responseText);
                    if (responseText) {
                        if (password === responseText.password) {
                            //User logged, do something
                            callback();
                        } else {
                            //Password is wrong, do something
                        }
                    } else {
                        //User doesn't exist, do something
                    }
                },
                onServerError : function (e) {
                    //Server error, do something
                }
            });
        wcLogin.run(true);
    }
  }

Put this code somewhere in global scope (in an empty space) and when you want the user to login, use firebase.login(someEmail, somePassword, callback), where callback is a function that you want to run when the login is finished. And when you want to register a user, use firebase.register(someEmail, somePassword, callback).

OBS. Just remember to change the auth value in Firebase rules.