评论

教你简单实现小程序的一键登录、当前用户、用户安全功能

如何快速实现小程序的一键登录、当前用户、用户安全功能

一键登录

传统开发小程序登录后端工作:

  • 客户端调用wx.login()后获取的code,后端人员拿到code和微信换取openid和session_key;
  • 除此之外后端人员还需要根据openid生成session_token作为服务器和小程序之间做登录态校验保证安全性,客户端每次请求需要带上session_token,后端需要作校验;
  • 还需要提供接口给客户端保存用户信息(头像、名称等),或者根据openid去和微信换取用户信息;
  • 中间的过程的调试还需要花费大量的时间

利用bmob的小程序sdk的实现一键登录
以上后端开发工作全省了!!!

    wx.login({
        success: function (res) {
          var user = new Bmob.User();//实例化          
          user.loginWithWeapp(res.code).then(function (user) {
            if (user.get("nickName")) {
              //更新缓存中的openid
              wx.setStorageSync('openid', user.get("openid"))
            } else {
              //*************保存用户其他信息,比如昵称头像之类的*****************
              wx.getUserInfo({
                success: function (result) {
                  var nickName = result.userInfo.nickName;
                  var avatarUrl = result.userInfo.avatarUrl;
                  var u = Bmob.Object.extend("_User");
                  var query = new Bmob.Query(u);
                  // 这个 id 是要修改条目的 id,你在生成这个存储并成功时可以获取到,请看前面的文档
                  query.get(user.id, {
                    success: function (result) {
                      // 自动绑定之前的账号
                      result.set('nickName', nickName);
                      result.set("userPic", avatarUrl);
                      result.set("openid", openid);
                      result.save();
                    }
                  });
                }
              });
              //*************保存用户其他信息,比如昵称头像之类的end*****************
            }
          }, function (err) {
            console.log(err, 'errr');
          });
        }
      });
    }

user用户对象中的loginWithWeapp方法使用当前使用小程序的微信用户身份注册或登录,成功后用户的 session 会在设备上持久化保存,之后可以使用 Bmob.User.current() 获取当前登录用户

如果该用户是第一次使用此应用,调用登录 API 会创建一个新的用户,你可以在 控制台 >应用> 数据 中的 _User表中看到该用户的信息,如果该用户曾经使用该方式登录过此应用,再次调用登录 API 会返回同一个用户。

登录后获取到一个用户数据对象,包括用户唯一标识objectId、openid、nickName、avatarUrl、authData,authData包括session_token登录校验,小程序sdk封装了请求带上了缓存authData的session_token,所以session_token这部分 不需要bmob的开发者考虑;


当前用户

如果用户每次打开App的时候都要求登录无疑是令人感到厌烦的,你可以通过缓存当前的Bmob.User对象来避免这个问题。

无论你使用任何注册或者登录方法,用户都会在localStorage中储存,你可以把缓存作为一个session对待,并且自动假设用户已经登录了。

你可以操作**Bmob.User.current()**来获取当前用户的信息

var currentUser = Bmob.User.current();

用户安全

Bmob.User类默认就是受保护的,在Bmob.User中保存的数据只能被那个用户所修改。默认地,数据仍然可以被任意客户端所读取。这样就是说,有些Bmob.User对象被认证后是可以修改的,其他的仍然是只读的。

特别的,你不能调用save或者delete方法除非Bmob.User经过了认证,就比如调用过了logIn或者signUp方法,这样保证只有用户能改动他们自身的数据。

怎么样,都很简单吧!

Bmob地址:www.bmob.cn

点赞 3
收藏
评论

1 个评论

  • 老张
    老张
    2019-04-15

    有了云开发后,这种模式还有存在的空间吗?我们的用户登录的云函数只有一句代码:


    exports.main = event => { return event.userInfo.openId }


    2019-04-15
    赞同
    回复 4
    • Bmob后端云
      Bmob后端云
      2019-04-15

      Bmob支持云函数

      2019-04-15
      回复
    • 老张
      老张
      2019-04-15回复Bmob后端云

      你不可能支持小程序的云函数。我猜,你们自己的API也叫作云函数吧?

      咋的?还能在你们的服务器上访问小程序的云数据库?

      2019-04-15
      回复
    • Bmob后端云
      Bmob后端云
      2019-04-15回复老张

      你不可能支持小程序的云函数。 这是不可能的,不止是我们,同行里所有提供云函数服务的企业都支持小程序云函数,就是华为云、阿里云的函数计算也支持小程序的云函数。



      函数计算服务器,云函数在小程序云还没推出之前,腾讯云已经推出,目前的小程序云是腾讯云团队的作品,并不是微信团队,也只是把腾讯云内部的云函数进行了简单封装,提供给大家用,函数计算本身无任何限制,你喜欢任意调用都可以,可小程序云的云函数跟腾讯云的云函数还是有区别, 小程序云的云函数屏蔽了第三方平台调用它的可能, 就像目前小程序的云数据库一样,限制了外部访问,并不支持第三方系统调用,也就导致了,开发一个非常完美的小程序开发不了管理后台的悲剧。


      你应该打少了一个字,小程序云的云函数?


      即使这样,我们也是支持小程序云的云函数调用的, 小程序云的云函数里面是支持调用外部第三方接口的,你在Bmob云还是在阿里云,或者是自己的后端,接口都是可以通过小程序云的云函数调用的。结论:支持小程序云的云函数调用的Bmob云函数


      2019-04-15
      1
      回复
    • 老张
      老张
      2019-04-15

      我的原话:“咋的?还能在你们的服务器上访问小程序的云数据库?”

      小程序的云函数里,可以调用你们的API,这没什么难的,本来就可以调用。

      有本事,你们的服务器上调用一下:wx.cloud.database()看看。

      我也没少打一个云字,小程序的云函数,这不会有歧义吧。

      反而是你说的:Bmob支持云函数,第一眼就带来了歧义,在误导读者,听上去就是说Bmob支持小程序的云函数,而实际上只是:你们的API也叫作云函数。

      如果说仅仅是因为小程序云函数可以调用你们的API,就叫作支持小程序云函数,那么百度也支持小程序云函数,阿里也支持小程序云函数,这说法...,太勉强了。

      2019-04-15
      回复
登录 后发表内容