2018-07-16  887 views 评论

ASP.NET WebApi作服务端开发小程序实现微信授权用户登录实例——登录逻辑(三)

上一篇“ASP.NET WebApi作服务端开发小程序实现微信授权用户登录实例——后台API编写(二)” 主要讲了判断用户是否初次访问小程序,并在用户授权成功的情况下自动注册为本地用户,本篇主要讲解通常情况下用户已经注册为本地用户时如何实现登录逻辑

Step1:请求ExistsAccount API得知对应openId的用户已经存在于本地数据库,则需要进行登录验证逻辑

Step2:调用Login 方法,获取用户信息进行登录

若登录成功,console输出的数据如下(查出的是对应openId的本地数据库数据),其他的头像数据,昵称数据可以直接使用wx.getUserInfo获取到的开放数据,当然如果想要获取本地的账号详情也是OK的,只是需要自己重写登录方法(现在只查了以下数据)。

 

登录成功截图:

 

以下为登录逻辑代码:

小程序JS端:

主要代码,参数是如何获取的见ASP.NET WEBAPI作服务端开发小程序实现微信授权用户登录实例(一) 中的js,以下代码写在console.log("已经注册")下方:

wx.request({
  url: app.globalData.apiUrl + 'Account/Login',
  data: {
    Account: res.data.Data.openId,
    Pwd:"",
    AuthType:3
  },
  method: 'POST',
  header: {
    'content-type': 'application/x-www-form-urlencoded'
  },
  success: function (resLogin) {
    console.log(resLogin)
    if(resLogin.data.Code == 0){
      //登录成功
      wx.showToast({
        title: '登录成功',
        icon: 'success'
      })
      //1、记录seeionKey到localStorage
      //2、记录用户信息到localStorage
      wx.setStorageSync("SessionKey", res.data.Data.sessionKey)
      wx.setStorageSync("UserInfo", resLogin.data.Data)
    }else{
      wx.showToast({
        title: '登录失败',
        icon: 'success'
      })
    }
  }
})

 

API服务端

1)Login方法:

/// <summary>
/// 登陆账号验证
/// </summary>
/// <param name="entity">账号模型</param>
/// <returns></returns>
[Route("Login")]
public BaseGetResponse<AccountAuths> PostExistsAccount([FromBody]AccountLoginDto entity)
{
    return operationContext.AccountAuthService.Login(entity);
}

2)业务层登录代码 判断authtype是因为数据层查询方式不同

/// <summary>
/// 帐号登录
/// </summary>
/// <param name="entity">AccountLoginDto 登录传输模型</param>
/// <returns>BaseGetResponse</returns>
public BaseGetResponse<AccountAuths> Login(AccountLoginDto entity)
{
    BaseGetResponse<AccountAuths> _baseGetResponse = null;
    #region +数据有效性验证
    if (entity == null)
    {
        return new BaseGetResponse<AccountAuths>()
        {
            Code = ResultCode.ParametersRequired,
            Message = "参数不能为空",
        };
    }
    #endregion
    if (entity.AuthType == "3")
    {
        _baseGetResponse = _accountAuthRepository.LoginByWx(entity.Account);
    }
    else { 
        _baseGetResponse = _accountAuthRepository.Login(entity);
    }
    return _baseGetResponse;
}

3)数据操作层

/// <summary>
/// 检索当前帐号是否存在,关键词:Identifier 返回accountAuth
/// </summary>
/// <param name="identifier">identifier</param>
/// <returns>BaseGetResponse</returns>
public BaseGetResponse<AccountAuths> LoginByWx(string identifier)
{
    BaseGetResponse<AccountAuths> _baseGetResponse = new BaseGetResponse<AccountAuths>();
    try
    {
        using (var conn = new MySqlConnection(DatabaseManager.CONNSTR))
        {
            conn.Open();
            #region + SQL 拼接
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat(@"select * from AccountAuth where Identifier='{0}' AND DataFlag = 1 AND IsDel = 0;",, identifier);
            #endregion
            var rs = conn.QueryFirstOrDefault<AccountAuths>(sb.ToString());
            rs.Credential = "";
            if (rs == null)
            {
                _baseGetResponse.Data = rs;
                _baseGetResponse.Code = ResultCode.NotExistsValue;

            }
            else
            {
                _baseGetResponse.Data = rs;
                _baseGetResponse.Code = ResultCode.NormalCode;
                _baseGetResponse.Count = 1;
            }
        }
    }
    catch (Exception ex)
    {
        _baseGetResponse.Code = ResultCode.UnknownException;
        _baseGetResponse.Message = ex.Message;
    }
    return _baseGetResponse;
}

至此,微信小程序使用ASP.NET WEBAPI作为服务端实现微信授权用户登录就全部实现了。案例可以直接使用,但还存在很多Bug需要自行理解发现并修复。

本系列其他教程见:

ASP.NET WEBAPI作服务端开发小程序实现微信授权用户登录实例(一)

ASP.NET WEBAPI作服务端开发小程序实现微信授权用户登录实例——后台API编写(二)

ASP.NET WEBAPI作服务端开发小程序实现微信授权用户登录实例——实现登录逻辑(三)

给我留言

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: