4

app微信登录

 3 years ago
source link: http://blog.ilibrary.me/2020/06/09/app%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

app微信登录

By zhiyong

发表于 2020-06-09

欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me

我用react native, React native可以用react-native-wechat来获取微信用户code,

WeChat.sendAuthRequest("snsapi_userinfo").then(
    (response)=>{
        console.log(response)
        Network.loginViaWechat(response.code)
            .then(user=>{
                console.log(user)
            }).catch(error =>{
                console.log(error);
        })

        // this.getOpenId(response.code);
    }
).catch((error) => {
    let errorCode = Number(error.code);
    if (errorCode === -2) {
        this.showAlert('已取消授权登录'); // errorCode = -2 表示用户主动取消的情况,下同
    } else {
        this.showAlert('微信授权登录失败');
    }
})

react-native-wechat的配置详见Build setup for iOS. 注意添加下面的行到AppDelegate.m:

// ios 9.0+
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
            options:(NSDictionary<NSString*, id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

rails 端可以用wechat来实现code换用户信息的逻辑.

def create
    code = params[:code]
    res = Wechat.api.web_access_token(code) # 第一步,code换取access_token和openid
    openid = res['openid']
    unionid = res['unionid']
    access_token = res['access_token']
    # openid = "oiWo445A9vVeZ49dmdz5VhrccAjg"
    # session_key = "bHX0jIrSer0T5g0cYXpFoQ=="

    login_user = User.find_or_initialize_by(openid: openid)
    if(not login_user.persisted?)
      user_info = Wechat.api.web_userinfo(access_token, openid) # 第二步,获取用户信息,这一步可以只做一次。
      # {"openid"=>"ogdA70kNhVQem0nOlwzGqvdWaUtM",
      #  "nickname"=>"北冥",
      #  "sex"=>2,
      #  "language"=>"zh_CN",
      #  "city"=>"",
      #  "province"=>"",
      #  "country"=>"卢森堡",
      #  "headimgurl"=>"http://thirdwx.qlogo.cn/mmopen/vi_32/X9TSedH6J3xwibibIsQeTcPAiaRy5ib9fhs4fze6mG4KCGZabnzu05wwlRPAf3RDXFm9keGp998aGrwyQfbh382ziaQ/132",
      #  "privilege"=>[],
      #  "unionid"=>"oVcvaw1RrgplBo0i-hJY7CUEsZcY"}
        Rails.logger.info user_info
        login_user.email = "#{openid}@wechat.com" unless login_user.email.present?
        login_user.openid = openid
        login_user.unionid = unionid
        login_user.avatar = user_info["headimgurl"]
        login_user.skip_password_validation = true
      login_user.name = user_info["nickname"]
      login_user.wechat_user_info = user_info
        # login_user.confirmed_at = Time.zone.now if login_user.new_record?
        login_user.save!
    end

    render json:user
end
扫描二维码分享到微信朋友圈Loading...Please waitqrcode.php?url=%2F2020%2F06%2F09%2Fapp%25E5%25BE%25AE%25E4%25BF%25A1%25E7%2599%25BB%25E5%25BD%2595

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK