requestLogin - 请求登录
通过Trezor钱包的挑战/应答验证。为了对抗重放攻击,开发者应当 使用后端生成的随机的challengeHidden。开发者也可以提供在钱包上 可视的挑战。
服务后端需要检查签名是否匹生成的challengeHidden、提供的 challengeVisual和保存的publicKey字段。如果是的话,后端 要么创建账户(如果publicKey是首次出现),要么登入用户 (如果publicKey是已知用户)。
要理解完整机制,请参考 SLIP-0013:确定性层级验证。
调用方法
ES6:
const result = await TrezorConnect.requestLogin(params);
CommonJS:
TrezorConnect.requestLogin(params).then(function(result) {
});
参数:
可选的公共参数:
- useEmptyPassphrase:总是设置为true,并且本方法忽略
使用服务端异步挑战的登录:
- callback:TrezorConnect将调用该函数来获取challengeHidden和challengeVisual,必须
不使用异步挑战的登录:
- challengeHidden:16进制字符串,必须
- challengeVisual:显示在Trezor上的文本,必须
示例代码
基于服务端异步挑战的登录:
TrezorConnect.requestLogin({
callback: function() {
// here should be a request to server to fetch "challengeHidden" and "challengeVisual"
return {
challengeHidden: '0123456789abcdef',
challengeVisual: 'Login to',
}
}
})
不使用异步挑战的登录:
TrezorConnect.requestLogin({
challengeHidden: '0123456789abcdef',
challengeVisual: 'Login to',
})
返回结果
{
success: true,
payload: {
address: string,
publicKey: string,
signature: string,
}
}
错误信息:
{
success: false,
payload: {
error: string // error message
}
}
服务端示例
下面是不同语言的服务端签名验证示例:
从之前版本迁移
版本4及更早:
// site icon, optional. at least 48x48px
var hosticon = 'https://example.com/icon.png';
// server-side generated and randomized challenges
var challenge_hidden = '';
var challenge_visual = '';
TrezorConnect.requestLogin(
hosticon, // hosticon is moved to common parameters
challenge_hidden,
challenge_visual
function(result) {
result.signatures // not changed
result.public_key // renamed to "publicKey"
result.version // removed, it's not possible to use this method witch outdated firmware
// added "address" field
}
);
版本5:
// params are key-value pairs inside Object
TrezorConnect.requestLogin({
challengeHidden: '',
challengeVisual: '',
}).then(function(result) {
...
})