我建议尝试创建一个与您的后端通信的自定义 Worklight 身份验证器。可以在此处找到自定义身份验证器的文档:
http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v600/08_04_Custom_Authenticator_and_Login_Module.pdf
要回答您的问题,以下是我在不使用自定义身份验证器的情况下如何处理它:
功能验证(用户名,密码){
var invocationData = {
adapter : 'authenticationAdapter',
procedure : 'authenticate',
parameters : [username, password]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : authSuccess,
onFailure : authFailure
});
}
- 从客户端的响应中获取cookie并保存(我建议使用JSONStore保存,它也可以加密保存的cookie)
function authSuccess(response){
console.log("Auth Success");
var myCookie = response.invocationResult.responseHeaders.CookieName
// Save cookie somehow
}
- 在随后的适配器调用中,从客户端发送 cookie 以及每个请求
函数适配器RequestForProtectedResource(){
var mySecureCookie = getMyCookieFromLocalStorage();
var invocationData = {
adapter : 'protectedResourceAdapter',
procedure : 'getResource',
parameters : [mySecureCookie]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess : success,
onFailure : failure
});
}
在适配器上,在标头中设置 cookie
函数 getResource(secureCookie) {
// Secure cookie must be of the form: "CookieName=cookievalue"
var input = {
method : 'get',
returnedContentType : 'json',
path : "/resource",
headers: {"Cookie": secureCookie}
};
return WL.Server.invokeHttp(input);
}