QQ、新浪微博用户 Oauth2 登录后本地用户不能登录是什么 原因?

问题描述

采用Asp.netIdentity2.0和asp.net4.5.1开发了一个网站,qq或是新浪微博用户用Oauth2登录网站后原来的本地用户就不能登录了.系统也不报错。但是只要把apppool回收一下就又可以登录了,有大侠知道是什么原因吗?代码如下:登录部份protectedvoidibQQLogin_Click(objectsender,System.Web.UI.ImageClickEventArgse){this.Session["RETURNURL"]=Request.QueryString["ReturnUrl"];varcontext=newQzoneContext();stringstate=Guid.NewGuid().ToString().Replace("-","");Session["qqrequeststate"]=state;stringscope="get_user_info";//stringscope="get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr";varauthenticationUrl=String.Format("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={0}&redirect_uri={1}&state={2}&scope={3}",QQOpenConnect.AppID,QQOpenConnect.callBackUrl,state,scope);Response.StatusCode=401;Response.Redirect(authenticationUrl);}callback回调:protectedvoidPage_Load(objectsender,EventArgse){if(!this.IsPostBack){if(Request.Params["code"]!=null){stringreturnUrl=this.Session["RETURNURL"]==null?"~/default.html":this.Session["RETURNURL"].ToString();varverifier=Request.Params["code"];varstate=Request.Params["state"];stringrequestState=this.Session["qqrequeststate"].ToString();if(state==requestState){varuserManager=newUserManager();StringuserName=String.Empty;try{UserAccessTokentoken=QQOpenConnect.GetAccess_Token(verifier,state);QQUserInfoqquerInfo=QQOpenConnect.GetQQUserInfo(token);lblUserName.Text=String.Format(@"欢迎,来自<imgsrc=""/Content/Images双击查看原图.png""/>QQ登录的&nbsp;{0}!",qquerInfo.Nickname);ViewState["OpenID"]=token.OpenId;ViewState["AccessToken"]=token.AccessToken;ViewState["RefreshToken"]=token.RefreshToken;ViewState["NickName"]=qquerInfo.Nickname;foreach(ApplicationUserappuserinuserManager.Users){LBMProfileCommoneuserProfile=LBMProfileCommone.GetUserProfile(appuser.UserName);if(userProfile.QQOpenid==ViewState["OpenID"].ToString()){//更新用户AccessToken;//本来计划用session来传递登录类型,但跳转后session是空的//只要把登录类型写在profile里。但这有个问题,就是一个用户//同时在不同地点登录会有问题。(遗留问题)userProfile.LoginType="QQLogin";userProfile.QQAccesstoken=token.AccessToken;userProfile.QQRefreshtoken=token.RefreshToken;userProfile.FirstName=qquerInfo.Nickname;userProfile.Save();userName=appuser.UserName;break;}}}catch(Exceptionex){Response.Redirect("ExternalLoginError.aspx");}if(String.IsNullOrEmpty(userName)==false){varuser=userManager.FindByName(userName);IdentityHelper.SignIn(userManager,user,isPersistent:false);IdentityHelper.RedirectToReturnUrl(returnUrl,Response);}}elseResponse.Redirect("ExternalLoginError.aspx");}else{Response.Redirect("ExternalLoginError.aspx");}}}protectedvoidCreateUser_Click(objectsender,EventArgse){varmanager=newUserManager();stringreturnUrl=this.Session["RETURNURL"]==null?"~/default.html":this.Session["RETURNURL"].ToString();StringuserName=String.Format("QQ-{0}{1}{2}{3}{4}{5}",DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second,DateTime.Now.Millisecond,newRandom().Next(10000));varuser=newApplicationUser(){UserName=userName,Email=txtEmail.Text};IdentityResultresult=manager.Create(user,Password.Text);if(result.Succeeded){user=manager.FindByName(userName);if(manager.IsInRole(user.Id,Store_RoleName.StoreRegister.ToString())==false)manager.AddToRole(user.Id,Store_RoleName.StoreRegister.ToString());LBMProfileCommoneuserProfile=LBMProfileCommone.GetUserProfile(userName);userProfile.FirstName=ViewState["NickName"].ToString();userProfile.LoginType="QQLogin";userProfile.Mobile=btnMobilePhone.Text;userProfile.QQOpenid=ViewState["OpenID"].ToString();userProfile.QQAccesstoken=ViewState["AccessToken"].ToString();userProfile.QQRefreshtoken=ViewState["RefreshToken"].ToString();userProfile.Save();IdentityHelper.SignIn(manager,user,isPersistent:false);IdentityHelper.RedirectToReturnUrl(returnUrl,Response);Response.Redirect(returnUrl);}else{Response.Redirect("ExternalLoginError.aspx");}}这两部分的代码运行都没问题。

时间: 2024-09-21 00:49:09

QQ、新浪微博用户 Oauth2 登录后本地用户不能登录是什么 原因?的相关文章

jsp-JSP登录后怎么获取当前登录用户信息?

问题描述 JSP登录后怎么获取当前登录用户信息? 我用的是MySQL,做了一个登录界面,注册的的时候有很多信息,但是登录时只验证用户名和密码,数据库如下: 比如我现在要获取已经登录的用户abc的全部信息存入session中,并在其他页面中调用,代码应该怎么写?用电话tel举个例子就好,我再对照着自己摸索一下,感激不尽. 解决方案 密码应该md5加密,对于用户登录之后,在判断用户登录成功之后,可以把用户信息存入到session中,其他地方直接从session中取就可以了.对于刚学的,建议看下框架,

server 2008 ftp 配置好后,本地用户登陆不进去是怎么回事

问题描述 server 2008 ftp 配置好后,本地用户登陆不进去是怎么回事 匿名用户可以登陆,但是本地用户不能登陆,防火墙都禁止了,谢谢专家帮忙解决. 解决方案 错误是什么????? 解决方案二: 参考Windows Server 2008 R2 WEB/FTP 服务器安装配置要点 你的FTP的身份验证方式是怎么样设置的?除了匿名方式之外,有没有开启基本方式.另外你的权限管理是怎么样设置的?有没有设置特定的用户组或者用户,还有就是有没有设置用户隔离.先检查一下这些,然后看看日志,以便了解不

用spring springMVC mybatis实现用户登录验证,成功登录后显示用户数据

问题描述 用spring springMVC mybatis实现用户登录验证,成功登录后显示用户数据 ? 登陆成功后,将所有用户数据展示给用户,列出用户详细信息,并分页.用拦截器判断,如果没有登陆的话返回登陆页面并提示用户没有登陆 配置全部都写好了 求大神给写个 登录验证的页面 跟 登录成功后的页面 万分感谢! 急!!! 解决方案 http://download.csdn.net/detail/fengqilove520/8405907 解决方案二: SpringMVC + Mybatis 实现

关于群聊中 用户被T后,用户的会话也被从会话列表中删除了

问题描述 关于群聊中 用户被T后,用户的会话也被从会话列表中删除了,无法做好提示,实现不了像微信一样的提示,该如何解决谢谢 消息提示我知道怎么做,但是用户的会话也被从会话列表中直接删除了,这点很不友好,我看了代码,这是SDK中的逻辑,无法修改 解决方案 可以在群组监听的被踢方法里去提示下

android 环信登录后没有调退出登录的方法再次重新登录会出什么问题吗

问题描述 android  环信登录后没有调退出登录的方法再次重新登录会出什么问题吗 ,间隔几分钟 ,有时候发不出去消息是因为这个原因吗 ,我找不到发送消息失败的那块代码 解决方案 没有调用logout退出,在登录会报错,不允许重复登录

请问实际项目中限制登录后的用户才可查看此页面时如何做的?

问题描述 我现在学习过程中用的是登录成功时在session中添加信息,然后其他jsp页面中加上检查session的java代码,session不存在就跳转到其他界面(登录页面提示页面),session信息存在就可查看此网页.请问实际生产过程中,这一过程一般是怎么实现的?谢谢. 解决方案 解决方案二:你有注册登录功能.那就在你需要登录后才能访问的页面添加一个session判断.request.getSession()获取session,如果有只就正常访问,无值就调整到指定页面.登录页面需要在登录的

Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】

应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是否登录或SESSION是否有效,然后进行其正常操作.具体实例如下: 新建一个拦截器类UserInterceptor ,UserInterceptor.java代码如下 [java] view plaincopyprint? package com.hsinghsu.test.interceptor;

环信对于以下两种场景支持吗?单点多用户登录,单用户多点登录?

问题描述 单点多用户登录是指在单个APP客户端(IOS或者ANDROID)同时登录多个环信ID账号,接收不同的聊天信息单用户多点登录是指一个账号同时在多个设备(IOS或者ANDROID)同时登录 这两个场景环信都支持吗?看了文档,单用户多点登录似乎不支持,webim和app组合除外. 解决方案 1.一个账号不能多点登录,sdk有互踢功能2.多个账号也不能在一点登录,调用login成功之后,如果不调用对应的logout,再调用login就会报错3.webim和移动端可以同时在线解决方案二:客户端不

ASP.NET 如何控制登录好的用户

问题描述 我想问二个问题,第一就是什么情况下用存储过程,第二个就是怎么控制门户网站的登录用户,就像门户网站顶边一边是用户登录或者注册,我想问登录好的用户如何控制下面的新闻进行留言呢,如果是登录传id,那么每一个页面都需要传很麻烦 解决方案 解决方案二:有个东西叫Cookies或Session楼主你不懂?还有一个叫Passport你不懂?解决方案三:引用楼主sysyhn的回复: 如果是登录传id,那么每一个页面都需要传很麻烦 如果说跨页面时连考虑个id值传送都嫌麻烦,那么真的就不要写代码了.解决方