91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Vue中使用abp實現一個微信掃碼登錄功能

發布時間:2021-04-06 16:32:06 來源:億速云 閱讀:326 作者:Leah 欄目:web開發

這篇文章將為大家詳細講解有關怎么在Vue中使用abp實現一個微信掃碼登錄功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

生成登錄二維碼#

在vue登錄頁面嵌入登錄二維碼,根據官方文檔,在頁面中放入一個div元素,二維碼就放在此元素中,注意var obj = new WxLogin必須放在mounted方法中執行,此時vue才會把dom元素初始化掛載到dom樹,可以參見vue官方文檔生命周期介紹。

<template>
 <div id="login" class="login"></div>
</template>

<script>
export default {
 name: "WXLogin",
 data: function() {
  return {};
 },
 mounted() {
  this.wechatHandleClick();
  document.getElementsByTagName("iframe")[0].height="320";
  document.getElementsByTagName("iframe")[0].style.marginLeft="30px";
 },
 methods: {
  wechatHandleClick() {
   let ba64Css =
    "css代碼base64編碼";// 微信需要https的樣式路徑,這里將樣式內容加密base64,可以避免使用https,如果你的網站是https的可以直接使用安官方文檔使用css文件路徑
   const appid = "你第一步申請的Appid";
   const redirect_uri = encodeURIComponent("http://*/#/login");
   var obj = new WxLogin({
    id: "login", //div的id
    appid: appid,
    scope: "snsapi_login",//固定內容
    redirect_uri: redirect_uri, //回調地址
    // href: "http://*/static/UserCss/WeChart.css" //自定義樣式鏈接,第三方可根據實際需求覆蓋默認樣式。    
    href: "data:text/css;base64," + ba64Css
    // state: "", //參數,可帶可不帶
    // style: "", //樣式 提供"black"、"white"可選,默認為黑色文字描述
   });
  }
 }
};
</script>

注冊回調事件#

用戶掃碼后微信會回調訪問前一步提供的redirect_uri,這里要監控微信回調,并用微信返回的code請求后端,在后端再去訪問微信服務器獲取token及用戶openID

在回調頁面中監控路由改變事件以監控微信回調(因為我的二維碼和回調在同一個路由頁面),如果有其他更好的方法請告訴我。

 @Watch("$route")
 async RouteChange(newVal, oldVal) {
  await this.weixinRedirect();
 }
 // 請求微信后臺
 async weixinRedirect() {
  let code = this.$route.query.code;
  let state = this.$route.query.state;
  if (code) {
   let wxTo = {
    code,
    state
   };
   //請求后臺
   this.$http("*/WeixinRedirect",data:wxTo).then((token)=>{
     //登錄成功,把token寫入cookie
     //跳轉到主頁
      this.$router.replace({ path: "/", replace: true });
   }).catch(error => {
     //保持當前頁面
     this.$router.replace({ path: "/login", replace: true });
    });
  }
 }
}

后端接收code請求token#

在appsettings.json中配置AppId和AppSecret

怎么在Vue中使用abp實現一個微信掃碼登錄功能

[HttpPost]
public async Task<AuthenticateResultModel> WeixinRedirect(string code, string state)
{
  if (code.IsNullOrEmpty())
  {
    throw new UserFriendlyException("微信授權失敗,請重新授權");
  }
  var appid = configuration["Authentication:Wechat:AppId"];
  var secret = configuration["Authentication:Wechat:AppSecret"];
  var url = $"https://api.weixin.qq.com/sns/oauth3/access_token?appid={appid}&secret={secret}&code=[code]&grant_type=authorization_code";
  var httpClient = httpClientFactory.CreateClient();
  httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
  httpClient.Timeout = TimeSpan.FromMinutes(3);

  var resstr = await httpClient.GetStringAsync(url);
  try{
    //如果微信授權返回失敗這里序列化不成功
   var res = JsonSerializationHelper.DeserializeWithType<WeiXinAccess_tokenResponse>(resstr);
  }catch (Exception e)
  {
    throw new UserFriendlyException("獲取微信access_token失敗");
  }
  if (res == null || res.openid.IsNullOrEmpty())
  {
    throw new UserFriendlyException("獲取微信access_token失敗");
  }
  var userId = //根據openID獲取用戶id,我們系統要求用戶提前把微信和用戶關聯綁定,所以這里可以根據微信用戶的openID獲取到戶農戶id;
  //使用用戶直接登錄
  if (!userId.IsNullOrEmpty()&&long.TryParse(userId, out long id))
  {
    var user = await _userManager.GetUserByIdAsync(id);
    var loginResult = await _logInManager.LoginByUser(user);
    string accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));

    return new AuthenticateResultModel
    {
      AccessToken = accessToken,
      EncryptedAccessToken = GetEncrpyedAccessToken(accessToken),
      ExpireInSeconds = (int)_tokenConfiguration.Expiration.TotalSeconds,
      UserId = loginResult.User.Id
    };
  }
  throw new UserFriendlyException("微信尚未綁定賬號,請使用賬號登錄后綁定微信。");

}

WeiXinAccess_tokenResponse類型

public class WeiXinAccess_tokenResponse
{
  public string access_token { get; set; }
  public int expires_in { get; set; }
  public string refresh_token { get; set; }
  public string openid { get; set; }
  public string scope { get; set; }
  public string unionid { get; set; }
}

關于怎么在Vue中使用abp實現一個微信掃碼登錄功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹东市| 临猗县| 孟津县| 汝城县| 屏山县| 成都市| 偏关县| 揭东县| 东丰县| 焉耆| 施甸县| 井研县| 太谷县| 宁蒗| 浮山县| 新化县| 河北区| 蕉岭县| 青冈县| 阳谷县| 抚州市| 星座| 内丘县| 涟水县| 苍梧县| 阳东县| 宝丰县| 无极县| 康马县| 德昌县| 民县| 财经| 三原县| 荔浦县| 阿拉善左旗| 庄浪县| 十堰市| 抚宁县| 重庆市| 临安市| 威信县|