swan.login
解释: 调用接口 swan.login 获取 Authorization Code ,智能小程序可以使用swan.login()
接口获取Authorization Code。
Web 态说明:**初次登录: Web 态在小程序未登录状态下登录时,会跳转到百度提供的授权登录页,登录成功后再跳回原小程序页面。该跳转过程会导致无法恢复原小程序页面的上下文,所以 swan.login 的回调(success、fail、complete)无法执行,从而开发者无法获取到 code。为了解决上述问题,开发者需要在 App 示例上额外增加一个 onLogin 生命周期,用于在 Web 态下获取 code 值。具体见下面代码示例1登录态下再登录:** Web 态和端内行为一致。
方法参数
Object object
object参数说明
属性名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
timeout | number | 否 | 超时时间,单位ms | |
success | Function | 否 | 接口调用成功的回调函数 | |
fail | Function | 否 | 接口调用失败的回调函数 | |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
success 返回参数说明
参数 | 类型 | 说明 |
---|---|---|
code | String | 用户登录凭证(有效期十分钟),开发者需要在开发者服务器后台调用 api,使用 code 换取 session_key 等信息。用户登录凭证code只能使用一次。 |
示例
扫码体验
请使用百度APP扫码
图片示例
代码示例1 获取code
- 在 js 文件中
// Page.js
Page({
data: { },
login() {
swan.login({
success: res => {
console.log('login success', res) // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
},
fail: err => {
console.log('login fail', err);
}
});
}
});
// App.js
App({
data: { },
// onLogin在百度 APP 端内小程序内永远不会执行,只有在 Web 态的小程序初次登录成功后才会执行
onLogin(e) {
console.log('login success', e) // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
// 使用 code 换取 session_key 等信息
}
});
代码示例2: 详细示例
详细示例请在开发者工具中查看。
- 在 js 文件中
swan.login({
success: res => {
swan.request({
url: 'https://xxx/xxx', // 开发者服务器地址
data: {
code: res.code
}
});
},
fail: err => {
console.log('login fail', err);
}
});
代码示例3: 开发者工具中左上角的登录 态与模拟器中用户的百度APP登录 态不同步,对于某些接口的登录 报错,开发者需要自行调用swan.login
组件模版为report-type="default",需要用此兼容逻辑,详细示例请在开发者工具中查看。
代码示例4: 联合登录
- 在 js 文件中
Page({
data: { },
onLoad() {
// 用户首次登录 小程序,同步百度APP登录 态
swan.login({
success: res => {
console.log('login success', res);
},
fail: err => {
console.log('login fail', err);
}
});
},
onShow() {
let that = this;
// 用户进入小程序检测小程序在百度APP的登录 态是否有效
swan.checkSession({
success: function (res) {
// 有效,获取用户信息
swan.getUserInfo({
success: res => {
console.log(res)
let userInfo = res.userInfo;
},
fail: err => {
console.log(err);
swan.showToast({
title: '请先授权'
});
}
});
},
fail: function (err) {
// 无效,同步百度APP登录 态
swan.login({
success: res => {
console.log('login success', res);
},
fail: err => {
console.log('login fail', err);
}
});
}
});
}
});
错误码
Android
错误码 | 说明 |
---|---|
201 | 解析失败,请检查调起协议是否合法 |
1001 | 执行失败 |
iOS
错误码 | 说明 |
---|---|
202 | 解析失败,请检查参数是否正确 |
10001 | 内部错误 |
10002 | 网络请求失败 |
10004 | 用户拒绝(user not login) |
10007 | 请求超时 |