• .net core 实现QQ登陆网站


     1    public const string appId = "";//QQ的APPID
     2         public const string appSecret = "";//QQ的appSecret
     3         public const string redirecturl = "";//回调地址
     4 
     5 #region QQ登陆
     6         /// <summary>
     7         /// 打开qq授权页面
     8         /// </summary>
     9         /// <returns></returns>
    10         public virtual IActionResult QqAuthorize()
    11         {
    12           var url=string.Format(
    13                    "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={0}&redirect_uri={1}&state=State",
    14                    appId, WebUtility.UrlEncode(redirecturl));
    15             return new RedirectResult(url);
    16         }
    17         /// <summary>
    18         /// QQ回掉方法
    19         /// </summary>
    20         /// <returns></returns>
    21         public virtual IActionResult QQLogin()
    22         {
    23             var code = Request.Query["code"];
    24             var token = GetAuthorityAccessToken(code);
    25             var dis = GetAuthorityOpendIdAndUnionId(token);
    26             var userInfo = GetUserInfo(token, dis["openid"]);
    27             return null;
    28         }
    29 
    30 
    31         public virtual string GetAuthorityAccessToken(string code)
    32         {
    33             if (string.IsNullOrEmpty(code))
    34                 return null;
    35             var url =
    36                 string.Format(
    37                     "https://graph.qq.com/oauth2.0/token?client_id={0}&client_secret={1}&code={2}&grant_type=authorization_code&redirect_uri={3}",
    38                     appId, appSecret, code, redirecturl);
    39             HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    40             var json =WebRequestHelper.GetResponse(request, "utf-8");
    41             if (string.IsNullOrEmpty(json))
    42                 return null;
    43             if (!json.Contains("access_token"))
    44             {
    45                 return null;
    46             }
    47             var dis = json.Split('&').Where(it => it.Contains("access_token")).FirstOrDefault();
    48             var accessToken = dis.Split('=')[1];
    49             return accessToken;
    50         }
    51         /// <summary>
    52         /// 获取OpenId和UnionId
    53         /// </summary>
    54         /// <param name="token"></param>
    55         /// <returns></returns>
    56         public virtual Dictionary<string, string> GetAuthorityOpendIdAndUnionId(string token)
    57         {
    58             if (string.IsNullOrEmpty(token)) return null;
    59             var url = $"https://graph.qq.com/oauth2.0/me?access_token={token}&unionid=1";
    60             HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    61             request.Method = "GET";
    62             request.ContentType = "application/x-www-form-urlencoded";
    63             var json =WebRequestHelper.GetResponse(request, "utf-8");
    64             if (string.IsNullOrEmpty(json) || json.Contains("error") || !json.Contains("callback"))
    65                 return null;
    66             Regex reg = new Regex(@"(([^)]*))");
    67             Match m = reg.Match(json);
    68             var dis = m.Result("$1").DeserializeJson<Dictionary<string, string>>();
    69             return dis;
    70         }
    71         /// <summary>
    72         /// 获取用户的基本信息
    73         /// </summary>
    74         /// <param name="token"></param>
    75         /// <param name="openId"></param>
    76         /// <returns></returns>
    77         public virtual Dictionary<string, string> GetUserInfo(string token, string openId)
    78         {
    79             if (string.IsNullOrEmpty(token)) return null;
    80             var url = $"https://graph.qq.com/user/get_user_info?access_token={token}&openid={openId}&oauth_consumer_key={appId}";
    81             HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    82             var json =WebRequestHelper.GetResponse(request, "utf-8");
    83             var dis = json.DeserializeJson<Dictionary<string, string>>();
    84             if (dis.ContainsKey("ret") && dis["ret"] != "0")
    85                 return null;
    86             return dis;
    87         }
    88         #endregion
    View Code

    //PS.

    我的项目中不允许用户直接使用第三方登陆,所在在登陆的时候会给一个页面让用户绑定已有账号

    在项目中遇到一个前端的知识盲区,就是如何关闭页面的同时刷新登陆页面。

    用到的js很简单

     1   需关闭的页面
     2  document.domain='@Html.GetUrl("Domain")';//跨域
     3             var json = {
     4                 Status:@Model.IsLogin.ToString().ToLower(),
     5             }
     6             window.opener.callbackQq(json)
     7             window.close();
     8 需刷新的页面
     9 window.callbackQq = function (result) {
    10     if (result.Status) {
    11         window.location.reload();
    12     }
    13     else {
    14         var _html = "";
    15         _html += '<span class="failure">请绑定账号,再使用第三方登陆</span>';
    16         $("#error").append(_html);
    17     }
    18 }

    登陆到这里应该算是完结了。

  • 相关阅读:
    发送http请求时,如果token过期了会返回什么
    遍历某个文件夹下所有的文件
    写出冒泡排序的算法
    sql,学生表(student),id,name ,age ,求前10个年龄最大的
    给一个无序数组,输出这个数组的前n个最大的
    python随机数模块random
    java --String、StringBuffer、StringBuilder
    java内存空间
    第四次寒假作业
    寒假作业3
  • 原文地址:https://www.cnblogs.com/CnnBlog/p/11448605.html
Copyright © 2020-2023  润新知