Files
QieKan-3.0/docs/dev/authentication.md
T

4.7 KiB

认证与登录 (Authentication)

toc

Legado 支持通过 CookieJar、登录 UI 表单和登录 URL 脚本三种方式实现网站认证。

1. CookieJar

启用后自动保存每次响应头中的 Set-Cookie 值,适用于需要 session 的网站(如验证码图片)。

在源编辑器中勾选「启用 CookieJar」即可,无需额外配置。

2. 登录 UI (Login UI)

通过 JSON 数组定义登录表单,替代内置 WebView 登录方式。

字段定义

字段 类型 必须 说明
name String 字段名称,显示为输入框标签
type String 字段类型
action String button 类型:点击时执行的动作
style Object Flexbox 布局配置

type 取值

说明
text 文本输入框
password 密码输入框
button 可点击按钮,action 为 URL 时打开浏览器,为函数名时调用 JS

JSON 示例

[
    { "name": "telephone", "type": "text" },
    { "name": "password", "type": "password" },
    {
        "name": "注册",
        "type": "button",
        "action": "http://www.example.com/register"
    },
    {
        "name": "获取验证码",
        "type": "button",
        "action": "getVerificationCode()",
        "style": {
            "layout_flexGrow": 0,
            "layout_flexShrink": 1,
            "layout_alignSelf": "auto",
            "layout_flexBasisPercent": -1,
            "layout_wrapBefore": false
        }
    }
]

style 布局属性

属性 类型 说明
layout_flexGrow Int 弹性增长比例
layout_flexShrink Int 弹性收缩比例
layout_alignSelf String 交叉轴对齐方式
layout_flexBasisPercent Int 基础尺寸百分比,-1 为自动
layout_wrapBefore Boolean 是否强制换行

::: tip 版本变更 从版本 20221113 起,按钮支持调用「登录 URL」规则中的函数,必须实现 login 函数。 :::

3. 登录 URL (Login URL)

可填写登录链接或实现登录逻辑的 JavaScript。配合登录 UI 使用时,需要实现 login 函数。

JS 示例

function login() {
    java.log("模拟登录请求");
    java.log(source.getLoginInfoMap());
}
function getVerificationCode() {
    java.log("登录UI按钮:获取到手机号码" + result.get("telephone"))
}

获取登录信息

在登录按钮函数和 login 函数中,可通过以下方式获取用户输入:

// 登录按钮函数中
result.get("telephone")

// login 函数中
source.getLoginInfo()
source.getLoginInfoMap().get("telephone")

source 登录相关方法

方法 返回值 说明
login() 执行登录
getHeaderMap(hasLoginHeader) Map 获取请求头
getLoginHeader() String? 获取登录头字符串
getLoginHeaderMap() Map? 获取登录头 Map
putLoginHeader(header) 保存登录头
removeLoginHeader() 清除登录头
setVariable(variable) 设置源变量
getVariable() String? 获取源变量

AnalyzeUrl 函数

以下函数仅在「登录检查 JS」规则中有效:

方法 返回值 说明
initUrl() 重新解析 URL
getHeaderMap().putAll(source.getHeaderMap(true)) 重新设置登录头
getStrResponse(jsStr, sourceRegex) StrResponse 返回文本类型的访问结果
getResponse() Response 返回 Response 类型的访问结果

4. 登录检查 JS (Login Check)

在源的「登录检查 JS」字段中填写 JavaScript,用于判断当前登录状态。返回 true 表示已登录,返回其他值会触发重新登录流程。