swan.login

解释: 调用接口 swan.login 获取 Authorization Code ,智能小程序可以使用swan.login()接口获取Authorization Code。

Web 态说明:**初次登录: Web 态在小程序未登录状态下登录时,会跳转到百度提供的授权登录页,登录成功后再跳回原小程序页面。该跳转过程会导致无法恢复原小程序页面的上下文,所以 swan.login 的回调(success、fail、complete)无法执行,从而开发者无法获取到 code。为了解决上述问题,开发者需要在 App 示例上额外增加一个 onLogin 生命周期swan.login - 图1,用于在 Web 态下获取 code 值。具体见下面代码示例1登录态下再登录:** Web 态和端内行为一致。

方法参数

Object object

object参数说明

属性名类型必填默认值说明
timeoutnumber超时时间,单位ms
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数类型说明
codeString用户登录凭证(有效期十分钟),开发者需要在开发者服务器后台调用 api,使用 code 换取 session_key 等信息。用户登录凭证code只能使用一次。

示例

扫码体验

swan.login - 图2请使用百度APP扫码

图片示例

swan.login - 图3

swan.login - 图4

swan.login - 图5

代码示例1 获取code

在开发者工具中预览效果

  • 在 js 文件中
  1. // Page.js
  2. Page({
  3. data: { },
  4. login() {
  5. swan.login({
  6. success: res => {
  7. console.log('login success', res) // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
  8. },
  9. fail: err => {
  10. console.log('login fail', err);
  11. }
  12. });
  13. }
  14. });
  15. // App.js
  16. App({
  17. data: { },
  18. // onLogin在百度 APP 端内小程序内永远不会执行,只有在 Web 态的小程序初次登录成功后才会执行
  19. onLogin(e) {
  20. console.log('login success', e) // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
  21. // 使用 code 换取 session_key 等信息
  22. }
  23. });

代码示例2: 详细示例

在开发者工具中预览效果

详细示例请在开发者工具中查看。

  • 在 js 文件中
  1. swan.login({
  2. success: res => {
  3. swan.request({
  4. url: 'https://xxx/xxx', // 开发者服务器地址
  5. data: {
  6. code: res.code
  7. }
  8. });
  9. },
  10. fail: err => {
  11. console.log('login fail', err);
  12. }
  13. });

代码示例3: 开发者工具中左上角的登录 态与模拟器中用户的百度APP登录 态不同步,对于某些接口的登录 报错,开发者需要自行调用swan.login

在开发者工具中预览效果

组件模版为report-type="default",需要用此兼容逻辑,详细示例请在开发者工具中查看。

代码示例4: 联合登录

在开发者工具中预览效果

  • 在 js 文件中
  1. Page({
  2. data: { },
  3. onLoad() {
  4. // 用户首次登录 小程序,同步百度APP登录 态
  5. swan.login({
  6. success: res => {
  7. console.log('login success', res);
  8. },
  9. fail: err => {
  10. console.log('login fail', err);
  11. }
  12. });
  13. },
  14. onShow() {
  15. let that = this;
  16. // 用户进入小程序检测小程序在百度APP的登录 态是否有效
  17. swan.checkSession({
  18. success: function (res) {
  19. // 有效,获取用户信息
  20. swan.getUserInfo({
  21. success: res => {
  22. console.log(res)
  23. let userInfo = res.userInfo;
  24. },
  25. fail: err => {
  26. console.log(err);
  27. swan.showToast({
  28. title: '请先授权'
  29. });
  30. }
  31. });
  32. },
  33. fail: function (err) {
  34. // 无效,同步百度APP登录 态
  35. swan.login({
  36. success: res => {
  37. console.log('login success', res);
  38. },
  39. fail: err => {
  40. console.log('login fail', err);
  41. }
  42. });
  43. }
  44. });
  45. }
  46. });

错误码

Android

错误码说明
201解析失败,请检查调起协议是否合法
1001执行失败

iOS

错误码说明
202解析失败,请检查参数是否正确
10001内部错误
10002网络请求失败
10004用户拒绝(user not login)
10007请求超时