submitAdapterAuthentication 不工作
submitAdapterAuthentication not working
一旦我从质询处理程序收到 submitAdapterAuthentication,我一直在尝试执行特定操作,但我无法执行任何操作,因为我的代码甚至无法通过它进行编译。我在 angular 服务的一种方法中使用 submitAdapterAuthentication。该方法如下所示:
login: function (user, pass) {
//promise
var deferred = $q.defer();
//tempuser
tempUser = {username: user, password: pass};
userObj.user = user;
checkOnline().then(function (onl) {
if (onl) { //online
console.log("attempting online login");
var auth = "Basic " + window.btoa(user + ":" + pass);
var invocationData = {
parameters: [auth, user],
adapter: "SingleStepAuthAdapter",
procedure: "submitLogin"
};
ch.submitAdapterAuthentication(invocationData, {
onFailure: function (error) {
console.log("ERROR ON FAIL: ", error);
},
onConnectionFailure: function (error) {
console.log("BAD CONNECTION - OMAR", error);
},
timeout: 10000,
fromChallengeRequest: true,
onSuccess: function () {
console.log("-> submitAdapterAuthentication onSuccess!");
//update user info, as somehow isUserAuthenticated return false without it
WL.Client.updateUserInfo({
onSuccess: function () {
//return promise
deferred.resolve(true);
}
});
}
});
} else { //offline
console.log("attempting offline login");
deferred.resolve(offlineLogin());
}
uiService.hideBusyIndicator();
});
uiService.hideBusyIndicator();
return deferred.promise;
}
其中 ch 是
var ch = WL.Client.createChallengeHandler(securityTest);
和checkOnline是检查用户是否在线的函数:
function checkOnline() {
var deferred = $q.defer();
WL.Client.connect({
onSuccess: function () {
console.log("** User is online!");
deferred.resolve(true);
},
onFailure: function () {
console.log("** User is offline!");
deferred.resolve(false);
},
timeout: 1000
});
return deferred.promise;
}
最后,这是我 SingleStepAuthAdapter.js 中的“submitLogin”程序。 SingleStepAuthAdapter 是适配器的名称。
//-- exposed methods --//
function submitLogin(auth, username){
WL.Server.setActiveUser("SingleStepAuthAdapter", null);
var input = {
method : 'get',
headers: {Authorization: auth},
path : "/",
returnedContentType : 'plain'
};
var response = "No response";
response = WL.Server.invokeHttp(input);
WL.Logger.info('Response: ' + response.isSuccessful);
WL.Logger.info('response.responseHeader: ' + response.responseHeader);
WL.Logger.info('response.statusCode: ' + response.statusCode);
if (response.isSuccessful === true && (response.statusCode === 200)){
var userIdentity = {
userId: username,
displayName: username,
attributes: {
foo: "bar"
}
};
WL.Server.setActiveUser("SingleStepAuthAdapter", userIdentity);
return {
authRequired: false
};
}
WL.Logger.error('Auth unsuccessful');
return onAuthRequired(null, "Invalid login credentials");
}
所以我试图向我的控制器发送一个承诺,以便将用户重定向到另一个页面,但是由于挑战处理程序甚至没有工作,所以没有返回承诺。
顺便说一下,我已经学习了本教程:https://medium.com/@papasimons/worklight-authentication-done-right-with-angularjs-768aa933329c
有人知道这是怎么回事吗?
你对 Challenge Handler 的理解和我的理解有很大的不同。
虽然
ch.submitAdapterAuthentication()
在结构上与标准适配器调用方法相似我从未使用过任何回调。
我在IBM AdapteBasedAuthentication tutorial materials
工作
基本思想是您的挑战处理程序应该有两个回调方法:
isCustomResponse()
handleChallenge()
您将看到这些函数被调用以响应您的提交。
我建议先看看那些方法。我无法评论您引用的离子示例,但我自己将 angular/ionic 与身份验证框架和质询处理程序一起使用。我的出发点是上面提到的 IBM material。
一旦我从质询处理程序收到 submitAdapterAuthentication,我一直在尝试执行特定操作,但我无法执行任何操作,因为我的代码甚至无法通过它进行编译。我在 angular 服务的一种方法中使用 submitAdapterAuthentication。该方法如下所示:
login: function (user, pass) {
//promise
var deferred = $q.defer();
//tempuser
tempUser = {username: user, password: pass};
userObj.user = user;
checkOnline().then(function (onl) {
if (onl) { //online
console.log("attempting online login");
var auth = "Basic " + window.btoa(user + ":" + pass);
var invocationData = {
parameters: [auth, user],
adapter: "SingleStepAuthAdapter",
procedure: "submitLogin"
};
ch.submitAdapterAuthentication(invocationData, {
onFailure: function (error) {
console.log("ERROR ON FAIL: ", error);
},
onConnectionFailure: function (error) {
console.log("BAD CONNECTION - OMAR", error);
},
timeout: 10000,
fromChallengeRequest: true,
onSuccess: function () {
console.log("-> submitAdapterAuthentication onSuccess!");
//update user info, as somehow isUserAuthenticated return false without it
WL.Client.updateUserInfo({
onSuccess: function () {
//return promise
deferred.resolve(true);
}
});
}
});
} else { //offline
console.log("attempting offline login");
deferred.resolve(offlineLogin());
}
uiService.hideBusyIndicator();
});
uiService.hideBusyIndicator();
return deferred.promise;
}
其中 ch 是 var ch = WL.Client.createChallengeHandler(securityTest);
和checkOnline是检查用户是否在线的函数:
function checkOnline() {
var deferred = $q.defer();
WL.Client.connect({
onSuccess: function () {
console.log("** User is online!");
deferred.resolve(true);
},
onFailure: function () {
console.log("** User is offline!");
deferred.resolve(false);
},
timeout: 1000
});
return deferred.promise;
}
最后,这是我 SingleStepAuthAdapter.js 中的“submitLogin”程序。 SingleStepAuthAdapter 是适配器的名称。
//-- exposed methods --//
function submitLogin(auth, username){
WL.Server.setActiveUser("SingleStepAuthAdapter", null);
var input = {
method : 'get',
headers: {Authorization: auth},
path : "/",
returnedContentType : 'plain'
};
var response = "No response";
response = WL.Server.invokeHttp(input);
WL.Logger.info('Response: ' + response.isSuccessful);
WL.Logger.info('response.responseHeader: ' + response.responseHeader);
WL.Logger.info('response.statusCode: ' + response.statusCode);
if (response.isSuccessful === true && (response.statusCode === 200)){
var userIdentity = {
userId: username,
displayName: username,
attributes: {
foo: "bar"
}
};
WL.Server.setActiveUser("SingleStepAuthAdapter", userIdentity);
return {
authRequired: false
};
}
WL.Logger.error('Auth unsuccessful');
return onAuthRequired(null, "Invalid login credentials");
}
所以我试图向我的控制器发送一个承诺,以便将用户重定向到另一个页面,但是由于挑战处理程序甚至没有工作,所以没有返回承诺。
顺便说一下,我已经学习了本教程:https://medium.com/@papasimons/worklight-authentication-done-right-with-angularjs-768aa933329c
有人知道这是怎么回事吗?
你对 Challenge Handler 的理解和我的理解有很大的不同。
虽然
ch.submitAdapterAuthentication()
在结构上与标准适配器调用方法相似我从未使用过任何回调。
我在IBM AdapteBasedAuthentication tutorial materials
工作基本思想是您的挑战处理程序应该有两个回调方法:
isCustomResponse()
handleChallenge()
您将看到这些函数被调用以响应您的提交。
我建议先看看那些方法。我无法评论您引用的离子示例,但我自己将 angular/ionic 与身份验证框架和质询处理程序一起使用。我的出发点是上面提到的 IBM material。