阅读(2208) (9)

百度智能小程序 登录

2020-08-13 16:26:58 更新

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 只能使用一次。

示例



图片示例

代码示例 1:获取 code 

在开发者工具中打开

<view class="wrap">
    <view class="card-area">
        <button bind:tap="login" type="primary" hover-stop-propagation="true">登录</button>
    </view>
</view>
// App.js
App({
    // onLogin在百度 APP 端内小程序内永远不会执行,只有在 Web 态的小程序初次登录成功后才会执行
    onLogin(options) {
        console.log('login success', options) // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
        // 使用 code 换取 session_key 等信息
    }
});

// Page.js
Page({
    login(e) {
        swan.checkSession({
            success: res => {
                console.log('checkSession success', res);
                swan.showToast({
                    title: '您已登录',
                    icon: 'none'
                });
            },
            fail: err => {
                console.log('checkSession fail', err);
                swan.login({
                    success: res => {
                        console.log('login success', res);
                        // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
                        swan.showToast({
                            title: '登录成功',
                            icon: 'none'
                        });
                    },
                    fail: err => {
                        console.log('login fail', err);
                        swan.showToast({
                            title: '登录失败',
                            icon: 'none'
                        });
                    }
                });
            }
        });
    }
});

参考示例

参考示例 1:同步手百的登录态实现联合登录流程 

在开发者工具中打开

Page({
    onLoad() {
        // 用户首次进入小程序,同步百度APP登录态
        swan.login({
            success: res => {
                console.log('login success', res);
                // 获取用户手机号或用户信息
                swan.getUserInfo({
                    success: res => {
                        console.log('用户信息', res);
                    },
                    fail: err => {
                        console.log('用户信息获取失败', err);
                        if (err.errCode === 10003) {
                            swan.showModal({
                                title: '用户信息获取失败,请先开启授权',
                                success: res => {
                                    swan.openSetting();
                                }
                            });
                        }
                    }
                });
            },
            fail: err => {
                console.log('login fail', err);
            }
        });
    },
    onShow() {
        // 用户进入小程序检测小程序在手百的登陆态是否有效
        swan.checkSession({
            success: res => {

console.log('用户的登陆态有效', res);

}, fail: err => { // 小程序的登陆态失效,需要再次登录 swan.login({ success: res => { console.log('login success', res); }, fail: err => { console.log('login fail', err); } }); } }); }, });

参考示例 2:与开发者服务器详细示例 

在开发者工具中打开

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

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

在开发者工具中打开

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

Web 态登录流程说明

Tips:

  • 由于小程序 Web 态框架无法触发开发者 login 中的 fail 回调,所以尽量不要在 login 的 fail 逻辑中实现小程序页面展现相关的关键逻辑。

错误码

Android

错误码说明

201

解析失败,请检查调起协议是否合法。

1001

执行失败

iOS

错误码说明

202

解析失败,请检查参数是否正确。

10001

内部错误

10002

网络请求失败

10004

用户拒绝(user not login)

10007

请求超时