b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

网站集成了QQ登录功能

电脑杂谈  发布时间:2020-06-25 08:31:40  来源:网络整理

网址登陆qq_网页qq登陆网址_qq登陆网址

I. 初步准备

首先,您需要登录QQ开发平台以注册帐户. QQ互联网平台的官方地址: 进入后,注册一个开发帐号. 登录后,将具有类似于以下内容的背景. 填写相关信息. 有关详细信息,请参见下图. 最后,我们将有一个APP ID和APP KEY. 只有这两件事,才能实现集成的QQ登录功能.

网页qq登陆网址_qq登陆网址_网址登陆qq

两个. 开发工作

在审核我们的帐户后,QQ开发平台将为我们提供一个APP ID和APP KEY. 通过这两个,我们可以开始开发工作.

QQ的登录使用OAuth2.0协议,OAuth(开放授权)是一种开放标准,允许用户授权第三方网站访问他们存储在另一服务提供商上的信息,而无需用户名和密码即可提供所有内容第三方网站或共享其数据. 具体内容可以参考QQ API文档/ oauth2-0%e7%ae%80%e4%bb%8b

网页qq登陆网址_qq登陆网址_网址登陆qq

QQ的开发平台已经具有PHP,JAVA,JS和其他版本的SDK. 如果要使用这些语言进行开发,则可以直接引用这些SDK. 我将直接谈论ASP.NET版本(MVC)的开发.

第一步. 首先在WebConfig的节点下添加以下配置

<add key="QQAppID" value="QQ平台给的APP ID" />
<add key="QQAey" value="QQ开发平台给的APP KEY"/>
<add key="QQCallBack" value="http://www.mylanqiu.com/Account/QQConnect/"/>
<add key="QQAuthorizeURL" value="https://graph.qq.com/oauth2.0/authorize" />

网页qq登陆网址_qq登陆网址_网址登陆qq

第二步. 在控制器中添加登录操作(我在这里使用MVC开发方法,如果它是传统的.NET,则可以在.aspx的Page_Load事件中直接添加以下方法)

public ActionResult LoginQQ()
{
string state = new Random(100000).Next(99, 99999).ToString();//随机数
Session["QQState"] = state;
string appID = ConfigurationManager.AppSettings["QQAppID"];
string qqAuthorizeURL = ConfigurationManager.AppSettings["QQAuthorizeURL"];
string callback = ConfigurationManager.AppSettings["QQCallBack"];
string authenticationUrl = string.Format("{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}", qqAuthorizeURL, appID, callback, state);//互联地址
return new RedirectResult(authenticationUrl);
}

此步骤主要是去QQ平台进行身份验证. 直观的观点是网址登陆qq,单击后将显示以下屏幕截图.

qq登陆网址_网页qq登陆网址_网址登陆qq

第三步. 单击上面的同意登录后(即使用QQ号登录QQ平台),QQ平台将通过我们上面配置的回调地址返回此页面,这是我在此处填写的地址. ,并将返回代码给我们,我们将使用此代码网址登陆qq,然后转到QQ开发平台以获取access_token,并使用此access_token获取与登录相关的用户信息. 具体代码如下:

/// <summary>
/// QQ回调页面
/// </summary>
public ActionResult QQConnect()
{
if (!string.IsNullOrEmpty(Request.Params["code"]) && !string.IsNullOrEmpty(Request.Params["state"]))
{
var code = Request.Params["code"];
var state = Request.Params["state"];
string requestState = Session["QQState"] == null ? "" : Session["QQState"].ToString();
if (state == requestState)
{
try
{
QQOAuthHelper QAuthHelper = new QQOAuthHelper();//这是一个辅助类,代码会在下面给出
QQOauthInfo qqOauthInfo = QAuthHelper.GetOauthInfo(code);
string openID = QAuthHelper.GetOpenID(qqOauthInfo);//获取用的OpenID,这个ID是QQ给我们的用户的唯一ID,可以作为我们系统用户唯一性的判断存在我们自己的库中
Session["QQOpenID"] = openID;
string nickName = QAuthHelper.GetUserInfo(qqOauthInfo, openID);//获取用户的昵称
UserAccount userAccount = AccountBLL.GetUserAccountByOpenID(OAuthPlatform.QQ.ToString(), openID);
if (userAccount != null)//判断是否是已用该OpenID是否已在我们的库中,若已存在则允许登录
{
SetAuthCookie(userAccount);
Response.Write("<script> window.opener.location.reload();window.close();</script>");
}
ViewData["NickName"] = nickName;
}
catch (Exception ex)
{
 
return new RedirectResult("~/Error/Error.htm");
}
}
else
{
return new RedirectResult("~/Error/Error.htm");
}
}
else
{
return new RedirectResult("~/Error/Error.htm");
}
return View();
}

通过以上步骤,可以实现网站整合QQ登录. 辅助类的源代码如下:

using System;
using System.Text;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.IO;
namespace Com.ABC.Mylanqiu.BLL
{
public class QQOAuthHelper
{
string appID = ConfigurationManager.AppSettings["QQAppID"];
string aey = ConfigurationManager.AppSettings["QQAey"];
/// <summary>
/// 获取oauth信息
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public QQOauthInfo GetOauthInfo(string code)
{
string callback = System.Web.HttpUtility.UrlEncode(ConfigurationManager.AppSettings["QQCallBack"], Encoding.UTF8);
string url = string.Format("https://graph.qq.com/oauth2.0/token?grant_type={0}&client_id={1}&client_secret={2}&code={3}&redirect_uri={4}", "authorization_code", appID, aey, code, callback);
string res = LoadHtmlUserGetType(url, Encoding.UTF8);
QQOauthInfo qqOauthInfo = new QQOauthInfo();
qqOauthInfo.AccessToken = CutString(res, "access_token=", "&expires_in=");
qqOauthInfo.ExpiresIn = CutString(res, "&expires_in=", "&refresh_token=");
qqOauthInfo.RefreshToken = res.Split(new string[] { "&refresh_token=" }, StringSplitOptions.None)[1];
return qqOauthInfo;
}
/// <summary>
/// 截取字符串中两个字符串中的字符串
/// </summary>
/// <param name="str">字符串</param>
/// <param name="startStr">开始字符串</param>
/// <param name="endStr">结束字符串</param>
/// <returns></returns>
private string CutString(string str, string startStr, string endStr)
{
int begin, end;
begin = str.IndexOf(startStr, 0) + startStr.Length; //开始位置
end = str.IndexOf(endStr, begin); //结束位置
return str.Substring(begin, end - begin); //取搜索的条数,用结束的位置-开始的位置,并返回
}
/// <summary>
/// 通过GET方式获取页面的方法
/// </summary>
/// <param name="urlString">请求的URL</param>
/// <param name="encoding">页面编码</param>
/// <returns></returns>
public string LoadHtmlUserGetType(string urlString, Encoding encoding)
{
 
HttpWebRequest httpWebRequest = null;
HttpWebResponse httpWebRespones = null;
Stream stream = null;
string htmlString = string.Empty;
try
{
httpWebRequest = WebRequest.Create(urlString) as HttpWebRequest;
}
catch (Exception ex)
{
throw new Exception("建立页面请求时发生错误!", ex);
}
httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; Maxthon 2.0)";
try
{
httpWebRespones = (HttpWebResponse)httpWebRequest.GetResponse();
stream = httpWebRespones.GetResponseStream();
}
catch (Exception ex)
{
throw new Exception("接受服务器返回页面时发生错误!", ex);
}
StreamReader streamReader = new StreamReader(stream, encoding);
try
{
htmlString = streamReader.ReadToEnd();
}
catch (Exception ex)
{
throw new Exception("读取页面数据时发生错误!", ex);
}
streamReader.Close();
stream.Close();
return htmlString;
}
/// <summary>
/// 获取QQ账号的OpenID
/// </summary>
/// <param name="qqOauthInfo"></param>
/// <returns></returns>
public string GetOpenID(QQOauthInfo qqOauthInfo)
{
string res = LoadHtmlUserGetType("https://graph.qq.com/oauth2.0/me?access_token=" + qqOauthInfo.AccessToken, Encoding.UTF8);
return CutString(res, @"openid"":""", @"""}");
}
/// <summary>
/// 获取QQ昵称
/// </summary>
/// <param name="qqOauthInfo"></param>
/// <param name="openID"></param>
/// <returns></returns>
public string GetUserInfo(QQOauthInfo qqOauthInfo, string openID)
{
 
string urlGetInfo = string.Format(@"https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", qqOauthInfo.AccessToken,appID, openID);
string resUserInfo = LoadHtmlUserGetType(urlGetInfo, Encoding.UTF8);
return CutString(resUserInfo, @"""nickname"": """, @""",");
}
}
public class QQOauthInfo
{
public string AccessToken { get; set; }
public string ExpiresIn { get; set; }
public string RefreshToken { get; set; }
}
}

四个. 演示效果

每个人都可以直接访问以查看实际效果,最后感谢您的阅读. 如果对您有帮助,请尽可能转发它以帮助更. 所谓: 给你一朵玫瑰!如果有短缺,请纠正我!


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-257714-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...