加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

一步步开发自己的博客 番外篇(8、第三方登录及问题记录)

发布时间:2020-12-15 21:25:10 所属栏目:asp.Net 来源:网络整理
导读:后,把"嗨博客"的前端好好的重构重构,现在的页面也太矬了一点。 )。时间都去哪儿了,时间都献给了技术。 前面我们讲过我们自己设计的。多次有人提议,应该加个匿名评论和第三方登录评论。本来想,自己新开的独立博客肯定没什么访问量,更不会有什么人去评

后,把"嗨博客"的前端好好的重构重构,现在的页面也太矬了一点。

)。时间都去哪儿了,时间都献给了技术。

前面我们讲过我们自己设计的。多次有人提议,应该加个匿名评论和第三方登录评论。本来想,自己新开的独立博客肯定没什么访问量,更不会有什么人去评论。意外的是,还真有几个人评论了,如果要评论还需特意去注册。为了方便和大家交流,我觉得有必要提前把第三方登录评论做掉,说做就做。

一、第三方授权登录

什么是第三方授权登录,就是一些大家都会有的帐号如QQ、微信、淘宝、微博等账户。通过那些巨头公司提供的api直接实现登录。

当然,我们是不可能得到你的用户名和密码的。不了解的人,可能会存在这个疑虑。我们可以通过第三方授权登录得到如昵称、性别、注册地址、年龄、头像等基本信息。当然,我们也可以得到你账户因为的唯一编码,就是OAuthId。?大家自行了解,这里就不细讲了。

二、Demo分析

我这里主要是做了QQ和新浪微博的授权登录,其他的没弄了。因为,现在的网民基本上人手几个QQ号,其实有QQ授权就完全足够了。但是,避免有些人疑惑安全问题,而使用平时不常用的微博,所以还加了一个微博授权。

这里主要是参考了园友()的博文,说是参考,其实是完全拿来主义。因为他写得demo完全可以直接运行了。并且内含QQ、微博、淘宝等授权登录,淘宝的我没有测试,QQ和微博是完全没问题的。

他的demo是放在github上的,下载速度比较慢。我这里提供一个。

三、问题一:刷新和强制刷新

上面的demo是完全没问题的,不过在我实际使用过程中遇到了些许问题。这里和大家分享下。

首先,我们在登录成功后,会根据授权得到的用户昵称和OAuthId创建一条用户信息存数据库,并存session里面作为登录标识。接着本应该刷新当前页面,显示登录详细如:XXX登录成功。

一般我们在浏览器的用js刷新当前页面会使用??或是??然后会出现一下问题。

当使用??Status直接返回一个304,而使用??Size是(from cache)

显然,都使用了缓存。

根据我的理解,第一种是去服务器确认了一次缓存有效性,然后服务器给浏览器304?Not Modified而使用缓存。第二种200(from cache)直接在浏览器端使用缓存,根本就没去服务器。

不管怎么说,都是没有真正刷新而取到服务器更新的数据。我们可以使用?);?//强制刷新(从服务器重新加载)

四、问题二:跨域问题

我们在域名绑定的时候一般都会直接绑定和加www绑定如:??。

这样问题就来了,我们在上面设置授权登录时需要设置一个回调地址:如??,这样我们在访问??是授权登录,而回调地址是没有带www。本来这样也是没有问题的,可是我的处理是,在回调页面设置父页面的href如:??;这样??访问的其实就是??域名,而我们回调页面地址域名是??。这里就会自己报错了,错误信息每个浏览器都不同,原因就是跨域了。跨域了就不允许通信。这也是浏览器的一种安全机制。

什么叫跨域?如下图,我们就是这种情况。

那我们如何解决这个问题。

方案一

我们可以设置两个回调地址,以QQ授权登录为例。

然后我们程序里面判断,如果当前访问地址带有www,那么我们就使用带有www的回调地址,反之则使用没有www的回调地址。

方案二

我们可以直接把网站所有url域名统一指向带www的域名或是统一指向不带www的域名。

这样我们访问如:??就自动301到了??,如此一来我们只用设置对应的域名下的回调地址了。

我们可以直接在iis里面设置,可以在web.config里面设置。因为我使用的免费阿里云,没有iis只能设置config了。

以上两种方案都可以完美解决我们遇到的跨域问题,不过这里又有个疑问。我们是把www301到不带www的url,还是把不带www301到带www的url。

所以,我们还是都带上www。我看博客园就是都执行了www,还有一些大的网站都是指向了www。

"temp.html",, () { window.open("temp.html",'newWindow','height=400,width=600,top=100,left=300,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no'

那我们怎么解决这个问题呢?手动触发弹出就不会拦截了。

页面上看起来效果都是点击,但是这样实现的话,就不会被拦截了。有人会问,为什么要发ajax请求,项目里面需要请求后的结果做为open的url。

好了,暂时问题就需要这么些,先记录到这里了。

-----------------------------------------更新20171024---------------------------------------------

如果非得ajax之后打开新页面,而不被拦截。可以:

的提醒,现在确实应该备战一下)

等。

机会总是给有准备的人

演示地址:? ??

博客源码:

如果您有更好的处理方式,希望不要吝啬赐教。

欢迎加入开源博客Q群:?

一步步开发自己的博客 .NET版系列:

本文链接:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读