Как создать веб-сервис для системы входа?

Мне было интересно, можно ли создать систему входа в систему с помощью веб-сервиса, поскольку мне нужно добавить систему входа в мое приложение в Smartface App Studio?

Спасибо


person Lucy Matthew    schedule 03.04.2016    source источник


Ответы (1)




Да, это возможно.
Одно из возможных решений — получить информацию о пользователе с сервера и сравнить пароль, который набрал пользователь, и пароль, пришедший с сервера, если они совпадают, авторизоваться. Лично я использую Firebase в качестве своего сервера, поэтому Я сохраняю имя объекта пользователя как его электронную почту, поэтому каждый раз, когда я хочу получить объект этого пользователя, я делаю запрос GET с его электронной почтой в URL-адресе.
Например.

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

Надеюсь, это поможет! :)


ИЗМЕНИТЬ

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);
    }
  }

Поместите этот код где-нибудь в глобальной области (в пустом месте), и когда вы хотите, чтобы пользователь вошел в систему, используйте firebase.login(someEmail, somePassword, callback), где обратный вызов — это функция, которую вы хотите запустить после завершения входа в систему. А когда вы хотите зарегистрировать пользователя, используйте firebase.register(someEmail, somePassword, callback).

ОБС. Только не забудьте изменить значение авторизации в правилах Firebase.

person Luccas Clezar    schedule 03.04.2016
comment
Ну, используя Firebase REST API, вы не можете использовать простую аутентификацию Firebase или любые другие методы аутентификации. Таким образом, вы можете реализовать метод аутентификации самостоятельно, используя пользовательскую аутентификацию firebase, но я не могу вам в этом помочь, извините. Что я сделал, так это просто добавил правило в Firebase, которое предотвращает любой вызов чтения (или записи) чего-либо на сервер без секрета приложения. Для этого просто зайдите в правила своего приложения и обновите методы .read и .write с помощью "auth = [YourAppSecret]" (секрет приложения можно найти на вкладке секретов). И теперь каждый раз, когда вы звоните на сервер, добавляйте ?auth=YourAppSecret в конце URL-адреса. - person Luccas Clezar; 05.04.2016
comment
Ваш URL будет выглядеть примерно так: https://exampleapp.firebaseio.com/Users/someUser.json?auth=yourAppSecret - person Luccas Clezar; 05.04.2016
comment
Я использовал свой URL-адрес Firebase в качестве веб-клиента и не знаю, как использовать клиент для системы входа в систему. - person Lucy Matthew; 05.04.2016
comment
Я разместил пример в своем ответе. Вы должны ПОЛУЧИТЬ информацию из пути пользователя (в Firebase), когда сервер вернет ее, вы должны сравнить информацию, которую написал пользователь (электронная почта и пароль), с той, которая пришла с сервера. Конечно, для этого вам понадобится электронная почта пользователя, поэтому просто укажите URL-адрес в качестве переменной, например URL: "https://exampleapp.firebaseio.com/Users" + userEmail + ".json?auth=YourAppSecret" . Если вы все еще не знаете, как это сделать, дайте мне знать, и я обновлю свой ответ полным примером. :) - person Luccas Clezar; 06.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 08.04.2016
comment
Вот что происходит, когда я нажимаю «Далее» после добавления URL-адреса веб-канала ↑ - person Lucy Matthew; 08.04.2016
comment
Прежде всего, я рекомендую вам создать веб-клиент по коду, потому что статический веб-клиент не принимает переменную в качестве любого параметра. Я лично использую его только для тестирования. Я отредактирую свой ответ, чтобы привести полный пример :) - person Luccas Clezar; 09.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 11.04.2016
comment
Ага, это я и имел в виду :) - person Luccas Clezar; 11.04.2016
comment
Теперь, как мне использовать веб-клиент для создания системы входа в систему - person Lucy Matthew; 12.04.2016
comment
Просто создайте логин и экран регистрации с адресом электронной почты и паролем (вы можете добавить дополнительные поля, если хотите) и добавьте текст этих полей в качестве параметров функции firebase. Например. firebase.login(Pages.Page1.emailEditBox, Pages.Page1.passwordEditBox, function() { alert("User logged!") }); - person Luccas Clezar; 12.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 12.04.2016
comment
Вот как ты должен это делать. - person Lucy Matthew; 12.04.2016
comment
Прежде всего, в вашем коде есть некоторые несоответствия... Но я сосредоточусь на части Firebase. Итак, это неправильный подход, вы не можете входить в систему каждый раз, когда меняете текст поля редактирования. Создайте кнопку и в событии onPressed этой кнопки возьмите текст из двух ваших EditBox'ов и запустите метод firebase.login с этими текстами. - person Luccas Clezar; 12.04.2016
comment
Я действительно борюсь, так что возможно ли создать простой проект с системой входа в систему. Спасибо, я очень ценю это - person Lucy Matthew; 13.04.2016
comment
Это довольно просто, но это здесь: mega.nz/#F!mpYHUYrD!EfJ-zUHpQMHT9j1jFq3K0A :) - person Luccas Clezar; 14.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 14.04.2016
comment
Я пытался открыть проект, но когда я это сделал, это произошло ↑ - person Lucy Matthew; 14.04.2016
comment
Я думаю, что это проблема с Мегой... Я обновлю файл. - person Luccas Clezar; 15.04.2016
comment
Как добавить к этому сервер firebase, когда я тестировал его, он сказал - person Lucy Matthew; 16.04.2016
comment
Может быть много всего... Вы обновили правила firebase? Вы изменили учетные данные и переменные корневого URL? - person Luccas Clezar; 17.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 17.04.2016
comment
Хорошо, а вы изменили правила в Firebase? - person Luccas Clezar; 18.04.2016
comment
На что вы меняете правила? - person Lucy Matthew; 18.04.2016
comment
Измените значения .write и .read на auth == yourAppSecret (измените yourAppSecret на секрет вашего приложения Firebase. - person Luccas Clezar; 18.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 18.04.2016
comment
Удалите все внутри правил. Затем добавьте следующее: ".write": "auth == yourAppSecret", ".read": "auth == yourAppSecret". Опять же, убедитесь, что вы заменили yourAppSecret на Firebase Secret. - person Luccas Clezar; 20.04.2016
comment
docs.google.com/drawings/d/ - person Lucy Matthew; 20.04.2016
comment
Как исправить код, чтобы устранить ошибку? - person Lucy Matthew; 20.04.2016
comment
Секрет вашего приложения должен находиться между апострофом. Например. "auth == 'yourAppSecret'" - person Luccas Clezar; 21.04.2016
comment
Является ли логин и аутентификация пользовательской аутентификацией или адресом электронной почты и паролем? - person Lucy Matthew; 08.05.2016
comment
Попробуйте приложение на эмуляторе устройства, чтобы увидеть проблему, и я использовал тот же код, в котором вы использовали пример приложения, которое вы мне дали, и извините за поздний ответ. - person Lucy Matthew; 09.05.2016
comment
Извините, что долго не отвечал, но комментарий не увидел. Я думаю, что если вы прочитаете мой ответ на свой последний вопрос, вы получите решение :) - person Luccas Clezar; 25.05.2016