У меня есть страница входа, которая отправляет учетные данные пользователя контроллеру входа. Но перед авторизацией пользователя мне нужно «открыть» сеанс и получить действительный идентификатор сессии.
Моей главной проблемой, однако, является обработка события ошибки на this.openUserSession
API позвоните ниже. То есть, я возвращаю $q.reject()
на событие $http.error()
, но он не пузырится по стеклу, как я ожидал.
Вот поток:
1) Пользователь вводит учетные данные и нажимает кнопку "Login", который вызывает в LoginCtrl
функции loginUser()
2) Я сразу называют ИНГ userService.initUserSession
, чтобы получить действительный SESSIONID ,
3) В случае успеха, а затем вызвать в loginService.authUser
4) Если недействительных SESSIONID, то мне нужно вернуть $q.reject
и сообщение на дисплее «Не удалось открыть сеанс пользователя»
***** КОД ДЕТАЛИ ** ***
Обратите внимание, что первый я "INIT" приложение в that.initRzr
, то я называю that.openUserSession
ниже:
this.initUserSession = function initSession($rootScope, username) {
var deferred = $q.defer();
deferred.notify("Establishing Session ID...");
$rootScope.userID = username;
var that = this;
this.getRazorInitParams().then(function (razorEnvJson) {
\t
\t that.initRzr(razorEnvJson).then(function (data) {
\t \t
\t \t if (data.status.match(/SUCCESS/g)) {
\t \t \t
\t \t \t // ******** OPEN USER SESSION ***********
\t \t \t that.openUserSession(razorEnvJson).then(function (data) {
\t \t \t \t // ... some code omitted here.
\t \t \t \t deferred.resolve(sessionID);
\t \t \t \t return sessionID;
\t \t \t });
\t \t }
\t }, function (error) {
// *** I NEVER HIT LINE !!! ***
\t \t deferred.reject('Could not open user session.');
\t });
});
return deferred.promise;
}
**** ОТКРЫТЫЙ пользовательскому сеансу ***
Примечание: Я ударять .error()
код здесь, как я могу видеть консольный вход сообщение «Не удается открыть сеанс пользователя с помощью API кал ... ». Тем не менее, обработка, кажется, останавливается здесь, и мой экран входа в систему просто зависает с иконкой spinner.
this.openUserSession = function (razorEnvParams) {
\t // init some variables here...
\t
\t var url = "http://" + _domain + ":" + _port + controllerpath + "?userid=" + user + "&pass=" + pass;
\t var deferred = $q.defer();
\t deferred.notify("Opening user session..."); \t
\t
\t $http({
\t \t method: 'GET',
\t \t encoding: 'JSON',
\t \t headers: {
\t \t \t 'Access-Control-Allow-Origin': 'true',
\t \t \t 'Content-Type': 'application/json'
\t \t },
\t \t withCredentials: true,
\t \t url: url
\t }).success(function (data, status, headers, config) { \t \t
\t \t deferred.resolve(data);
\t }).error(function (data, status, headers, config) {
\t \t console.log("Cannot open a user session via api call. Errors details: " + data);
\t \t deferred.reject("Could not open a user session.");
\t });
\t return deferred.promise;
}
Я буду стараться улучшить этот пост, если неясно. Пожалуйста, сообщите ...
благодарит заранее.
Боб
**** **** UPDATE
Согласно ответу JB Nizet в поле ниже, я пропускал обратный вызов ошибки that.openUserSession
. Я добавил function(error)
ниже, и он работал, как ожидалось.
Теперь я перейду к предложению JB.
this.initUserSession = function initSession($rootScope, username) { // ESTABLISH A RAGE CONNECTION AND SESSION ID !
var deferred = $q.defer();
deferred.notify("Establishing Rage Session ID...");
var that = this;
this.getRazorInitParams().then(function (razorEnvJson) {
\t that.initRazor(razorEnvJson).then(function (data) {
\t \t
\t \t if (data.status.match(/SUCCESS/g)) {
\t \t \t that.openUserSession(razorEnvJson).then(function (data) {
\t \t \t \t
\t \t \t \t deferred.resolve(sessionID);
\t \t \t \t return sessionID;
\t \t \t }, function (error) {
\t \t \t \t deferred.reject('Could not open user session.');
\t \t \t });
\t \t }
\t }, function (error) { // **** ADDED ERROR HANDLING ***
\t \t deferred.reject('Could not initial a user session.');
\t });
});
return deferred.promise;
}
абсолютно согласованный ре: запрос GET. Это все еще в режиме dev, и процесс безопасности будет переработан в ближайшее время. –
как вы сказали выше. У меня не было обратного вызова. Теперь он работает, когда я добавил 'function (error)' to' that.openUserSession'. Я также продолжу перекодировать это, чтобы придерживаться принципа цепочки. –
Я также использовал POST для других вещей, поэтому я только что закончил преобразовывать этот GET в POST. Он работает, если я использую 'data: {..}', однако с 'params {..}' У меня проблема в моем контроллере C# из-за использования JObject'-ex/'public HttpResponseMessage Post (JObject dashboardObj) '. Объект JObject в основном показывает значение Null. Я создам для этого еще одну запись, так как это очень важное изменение. –