项目完结记录-第三方登录(MicroSoft,qq,微信,微博,GitHub)

刚才再看core的东西,然而理解力太低,问问大神们写的啥,大神也很忙,算了。

想想还是做下上个项目总结好了,将来可能用的着。

 

第三方登录,虽然这部分不是我做的,不是你做的你还贴!项目总结嘛,又不一定是要我做的才能总结。

本次项目用到5个第三方登录,分别是MicroSoft,qq,微信,微博,GitHub。

先吐槽下,程序其实没什么难点,但是审批。。。。尤其是企鹅,就他破事最多,文字图标都不能改。

1).MicroSoft的技术分享

 

  前台:

<a href="https://login.live.com/oauth20_authorize.srf?client_id=*******&scope=wl.basic&response_type=token&redirect_uri=https://www.*******.com.cn/********/Win&state=ClientStateGoesHere" title="MicroSoftAccount登录"><img src="~/Content/Images/Login/icon_win.png" /></a>

  显示效果就是上面那个win图标。

  client_id就是 你去ms那里注册的应用的id,我之前搜别人教程的时候发现他们的clientid都是10左右的一串字符串,而我现在注册的都是guid,不论国内国外。

  还有一个比较坑的地方,在ms注册的应用必须是https的(反正人家不让我注册http的)。

  可我看到有别的网站用ms第三方redirect_uri后面写的是http的,不知道他们怎么弄的。

  至于scope和state没注意是啥,啥时候用得着再去看。

  win那个方法我们是直接return了个view()

  view里面是这样,直接去了token又丢后台=-=

$(document).ready(function () {
        var access_token = window.location.hash;
        access_token = access_token.split(‘&‘)[0].split(‘=‘)[1]; 
       //后面就是用ajax把access_token传到后台
});

  

  后台:

  

var result = HttpService.Get(" https://apis.live.net/v5.0/me?access_token=" + access_token); 
var obj = JsonConvert.DeserializeObject(result);
JObject userobj
= (JObject)obj;
var name= userobj["name"].ToString();
var id = userobj["id"].ToString();

  这样ms的就完成了,之后你比如想做本地注册反正name啥都有。

 

2).微信技术分享

 

  前台:

  

<a href="https://open.weixin.qq.com/connect/qrconnect?appid=wx**********&redirect_uri=http://www.****.com.cn/****/Wechart&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect" title="微信登录"><img src="~/Content/Images/Login/icon_wechat.png" /></a>

  你看这边的redirect_uri就不要求https,然后wechart方法是长这样的:

  

var result = HttpService.Get("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + wechartclientId + "&secret=" + wechartclientSecret + "&code=" + code + "&grant_type=authorization_code"); 
var obj = JsonConvert.DeserializeObject(result);
JObject accobj
= (JObject)obj;
string accessToken = accobj["access_token"].ToString();
string openid = accobj["openid"].ToString();
if (accessToken.Length > 0)
{
  result
= HttpService.Get("https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid);
  obj
= JsonConvert.DeserializeObject(result);
  JObject userobj
= (JObject)obj;
  var name= userobj["nickname"].ToString();
  var logo = userobj["headimgurl"].ToString();
}

  其中code微信那边丢过来的,wechartclientId和wechartclientSecret自然是去微信那边申请联动获得的2333.

  微信结束。

 

3). qq技术分享

  前台:

<a href="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=*****&redirect_uri=@Server.HtmlEncode("http://www.*****.com.cn/***/QQ")&state=test&scope=get_user_info" title="QQ登录"><img src="~/Content/Images/Login/icon_qq.png" /></a>

  然后qq(这名字。。)这方法这样的 :

  

var result = HttpService.Get("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=" + qqclientId + "&client_secret=" + qqclientSecret + "&code=" + code + "&redirect_uri=" + @Server.HtmlEncode("http://www.××××××.com.cn/××××××/QQ")); 
string accessToken = result != null ? result.Split(&)[0].Split(=)[1] : "";
if (accessToken.Length > 0){
  result
= HttpService.Get("https://graph.qq.com/oauth2.0/me?access_token=" + accessToken);
  result
= result.Substring(result.IndexOf(() + 1);
  result
= result.Substring(0, result.IndexOf()));
  var obj = JsonConvert.DeserializeObject(result);
  JObject userobj
= (JObject)obj;
  string openid = userobj["openid"].ToString();   result = HttpService.Get("https://graph.qq.com/user/get_user_info?access_token=" + accessToken + "&oauth_consumer_key=" + qqclientId + "&openid=" + openid);   obj = JsonConvert.DeserializeObject(result);   userobj = (JObject)obj;
  var name= userobj["nickname"].ToString();   var logo = userobj["figureurl_qq_2"].ToString(); }

  我是不知道这个httpservice.get中的redirect_uri有啥用,验证?反正不是我写的,我就记录下而已23333,下一个下一个。

 

4).微博技术分享

  前台:

<a href="https://api.weibo.com/oauth2/authorize?client_id=*****&redirect_uri=http://www.*****.com.cn/*****/Weibo&response_type=code" title="微博登录"><img src="~/Content/Images/Login/icon_sina.png" /></a>

  weibo方法:

var result = HttpService.Post("", "https://api.weibo.com/oauth2/access_token?client_id=" + weiboclientId + "&client_secret=" + weiboclientSecret + "&grant_type=authorization_code" + "&code=" + code + "&redirect_uri=http://www.*****.com.cn/****/Weibo", false, 10000); 
var obj = JsonConvert.DeserializeObject(result);
JObject acctokenobj
= (JObject)obj;

if (acctokenobj != null)
{
  
string access_token = acctokenobj["access_token"].ToString();
  string uid = acctokenobj["uid"].ToString();
  result
= HttpService.Get("https://api.weibo.com/2/users/show.json?access_token=" + access_token + "&uid=" + uid);   obj = JsonConvert.DeserializeObject(result);
  JObject userobj
= (JObject)obj;
  var name= userobj["screen_name"].ToString();
  var id = userobj["id"].ToString();
  var logo = userobj["profile_image_url"].ToString(); }

大同小异。

 

5).GitHub技术分享

  前台:

<a href="https://github.com/login/oauth/authorize?client_id=******&scope=user,public_repo" title="GitHub登录"><img src="~/Content/Images/Login/icon_github.png" /></a>

  诶,没有redirecturi,那是因为这个是要在github那边配的,我就不贴了。

  后台:

var result = HttpService.Get("https://github.com/login/oauth/access_token?client_id=" + githubclientId + "&client_secret=" + githubclientSecret + "&code=" + code); 
string accessToken = result != null ? result.Split(&)[0].Split(=)[1] : "";
if (accessToken.Length > 0)
{
  result
= HttpService.Get("https://api.github.com/user?access_token=" + accessToken);
  var obj = JsonConvert.DeserializeObject(result);
  JObject userobj
= (JObject)obj;
  var name = userobj["login"].ToString();
  var id = userobj["id"].ToString();
  var logo = userobj["avatar_url"].ToString();
}

  

很好,第三方登录的贴完了。

除了ms的,其他都是用的一种写法,就是在后台中再请求一次之前的地址,大概,我也没细看,能用就行。

本来想一篇全写完的,想想好像有点长,分开好了。

下篇总结啥呢?我先想想。