开源阅读源制作登陆示例
预计阅读时长 : 4 分钟
默认登录逻辑
需要登录的书源,默认使用内置 webView 访问 URL 登录网站,获取 Cookie 后可以再后续的网络访问中调用。
自定义登陆界面
如果需要自定义登陆界面,则需要配合使用以下两个配置项,通过 JS 代码实现登录逻辑。
登陆界面/登录 UI (loginUi)
使用 loginUi 定义登陆界面,包括输入框和按钮两种类型。
| [
{
"name": "telephone",
"type": "text"
},
{
"name": "password",
"type": "password"
},
{
"name": "获取验证码",
"type": "button",
"action": "getVerificationCode()"
}
{
"name": "注册",
"type": "button",
"action": "http://www.yooike.com/xiaoshuo/#/register?title=%E6%B3%A8%E5%86%8C"
}
]
|
在登录弹出窗口的右上角,点击 √
将调用 login
函数。
登陆地址/登录 URL (loginUrl)
自定义登录界面时,必须实现 login
函数,以于获取包含登录信息的 Header,并再后续的网络请求中使用。
getVerificationCode()
函数则对应了登录界面中的 获取验证码
按钮,用于获取验证码。(需要实现)
| function login() {
var loginInfo = source.getLoginInfo();
var json = java
.connect(
'https://www.kaixin7days.com/login,{"method":"POST","body":' +
loginInfo +
"}"
)
.body();
var loginRes = JSON.parse(json);
var header = null;
if (loginRes.statusCode == 200) {
var accessToken = {
Authorization: "Bearer " + loginRes.content.accessToken,
};
header = JSON.stringify(accessToken);
source.putLoginHeader(header);
}
}
function getVerificationCode() {
java.log("登录UI按钮:获取到手机号码" + result.get("telephone"));
}
|
使用登录信息
在后续的网络请求中,可以通过 source.getLoginHeader()
获取包含了登录信息的 header
,并作为参数实现登录状态访问。
| @js:
let header = JSON.parse(source.getLoginHeader())
let json = ''
let j = null
if (header != null) {
json = java.connect('https://www.kaixin7days.com/book-service/bookMgt/getBookCategroy,{"method":"POST","body":{}}', header).body()
j = JSON.parse(json)
}
if(j == null || j.statusCode != 200) {
source.login()
java.getHeaderMap().putAll(source.getHeaderMap(true))
json = java.connect('https://www.kaixin7days.com/book-service/bookMgt/getBookCategroy,{"method":"POST","body":{} }', header).body()
j = JSON.parse(json)
}
let fls = j.content
let fx = []
for(let i = 0; i < fls.length; i++) {
fx.push({
title: fls[i].categoryName,
url: '/book-service/bookMgt/getAllBookByCategroyId,{"method":"POST","body":{"categoryIds": "' + fls[i].associationCategoryIDs + '","pageNum": {{page}},"pageSize": 100}}'
})
}
result = JSON.stringify(fx)
|
登陆检测 (loginCheckJs)
登录检测脚本的主要作用是对当前页面的返回值进行判断,确定是否符合登录后返回值的预期,并根据返回值进行相应的处理。
如下代码中,如果返回值不符合预期,则重新执行登录流程,如果符合预期,则返回 result 代表的 responseBody 对象供后续规则使用。
| let response = result;
let body = JSON.parse(result.body());
if (body.statusCode == 301) {
source.login();
java.getHeaderMap().putAll(source.getHeaderMap(true));
response = java.getStrResponse();
} else if (body.statusCode == 200) {
return response;
} else {
throw body.message;
}
result = response;
|