首页 新闻 会员 周边

使用新浪微博登录网站时,授权回调页只能设置一个吗?

0
悬赏园豆:10 [已解决问题] 解决于 2013-12-03 15:47

  在做网站开发时,登陆需要嵌入微博登录入口,设置了回调页A(在登录成功后绑定本地用户。)

  在网站内部,我要做一个解绑和绑定的功能,想在授权成功后转到回调页B,但是我发现新浪微博似乎只能设置一个回调页面额,不能修改return-uri参数,有没有办法设置多个回调地址啊?求助。。。。(QQ就是可以滴,不晓得新浪微博为嘛不行。。)

ToBeStrong的主页 ToBeStrong | 初学一级 | 园豆:193
提问于:2013-12-03 14:10
< >
分享
最佳答案
1

QQ是在你发出第一次请求的时候自己设置的回调页,不是在管理页面写死的吧。

说实话大概看了一下没懂你的需求。

在新浪微博授权登录的时候,你需要自己设定在某个时刻回调页面A,某个时刻回调页面B?这个需求的出发点是什么?

收获园豆:10
空葫芦 | 初学一级 |园豆:9 | 2013-12-03 14:15

QQ登录时在请求时,自己设置回调页的。新浪微博登录是要在 开发者管理中心设定好授权页面,授权成功后,返回改页面的。  我现在是设置的是 登录时进行授权,然后经过我自己的业务逻辑处理后,后跳转进入网站。 

  网站内部有 解除绑定和 绑定操作,我想在处理绑定新浪微博这个业务时,回调到另外一个页面B(这个时候已经登录,原有回调页面没啥用了),我想知道怎么在授权成功后跳转到B.  新浪微博只能设置一个回调地址,而且程序内好像不能修改,不能添加参数。 QQ的话是可以自己修改的。。

ToBeStrong | 园豆:193 (初学一级) | 2013-12-03 14:36

@ToBeStrong: 我觉得你还是参考一些各大网站的授权流程。因为我不理解“我想在处理绑定新浪微博这个业务时,回调到另外一个页面B”的意义,和“这个时候已经登录,原有回调页面没啥用了”所指为何。、

从头说下我原来做的情况,看看你能参考以下不。

我们做了N个网站的OAuth登录,回调页面都是一个。具体根据这个URL中的一个参数TargetName区分,新浪的回调URL就设置为“回调地址?TargetName=TSina”,其他的依次类推。

1.如果想针对新浪微博的授权做什么特殊操作,可以根据这个参数区分

2.用户在登录时候是区分两种状态的,一是已经登录,二是没有登录。

2.1已经登录(在本网站登录)的,如果没有绑定第三方帐号,在数据库插入一条关联的数据。如果已经绑定了第三方帐号(数据库里面有这条数据,那么update记录的accesstoken和过期时间)

之后跳转到预定的页面(已经是网站的正常内容界面了)

2.2没有绑定的显示一个中转页,提示他是新注册账户绑定还是登录原有账户绑定,根据选择先进行原有网站的注册/登录操作,然后参考2.1中的步骤。

空葫芦 | 园豆:9 (初学一级) | 2013-12-03 14:50

@空葫芦: 嗯,非常感谢,我是才弄这个,所以比较困惑。现在我有两个问题请教一下哈:

1. 回调页是不是只能在 管理中心那里设置一个,请求时的回调地址必须与设置的回调页地址一样?

2. 可不可以在请求时参加自定义参数。

3. 回调页不是在授权成功后返回的页面吗?如果有多个页面都需要去请求改授权,都跳转到该页面么?

这是我比较困惑的地方。  您刚不理解我的那两句话,我再解释下,语言表达能力不好,见谅啦。

就是首先在登录界面,点击微博登录并授权后,在回调页A内处理 是否有关联账户、进行关联或直接登录进入网站。  在网站内部,用户可以解绑,解绑后可以点击绑定,此时还选择绑定哪个账号,会进行授权验证,然后又要跳转到回调页面啦,(原有回调页是进行账户注册并关联的那个页面),就是在这个地方,我想让跳转到 另外一个页面B,原有回调页是登录的时候跟账户绑定的页面。我现在想让跳转到B,直接用登录账号跟授权的微博账号进行绑定,不知道我说清楚了没有。。非常感谢您的耐心解答。

ToBeStrong | 园豆:193 (初学一级) | 2013-12-03 15:11

@ToBeStrong: 

1.我记得新浪微博是这样的,其他的各异。

2.可以,这个自定义参数一般是指回调URL包括了这些参数,他回调的时候会带着你的参数回来的,就像我刚才说的TargetName。

3.是的啊。

对外,回调页面就是一个,而且也不建议用多个。

具体的内部跳转的话,你可以用转发请求来做的。server.transfer,用MVC的话直接就return 目标Action。

“原有回调页是进行账户注册并关联的那个页面”,我觉得关键是这里的逻辑没有理清,你看随便找个网站看一下,如果当前未登录(在自己网站),回调过来应该是“绑定已有”和“注册绑定”共存的。

空葫芦 | 园豆:9 (初学一级) | 2013-12-03 15:34

@ToBeStrong: 可能也是我表达不太准确。

怎么说呢,你应该先不要想那些“是不是登录了,没有登录是不是要注册,是不是解除绑定再次登录”了的

就区分,是否在本地网站登录就行了。

你所说的解绑后再绑定,也是“本地已登录”这种情况。

空葫芦 | 园豆:9 (初学一级) | 2013-12-03 15:41

@空葫芦: 恩,太感谢啦,我看了下文档,是有state这个参数是会 回传给回调页面的。我可以根据这个参数进行跳转的。  恩,我就是参照着京东的做的,利用第三方登录时,回调页A就是处理第三方账户和网站内账户的那个页面(绑定已有和注册绑定共存),这是登录模块的。  在网站内部,我还有一个功能,就是登陆后,可以自己设置绑定的微博账号,可以直接解绑,未绑定用户也可以进行绑定,绑定时又要请求授权页面,然后跳转,这个时候跳转到 上面我提到的那个回调页(它已经不太合适了,因为用户还要输入自己的账号,才能关联。)这个时候我想要授权后就跳转到 另一个页面B,直接让用户选择当前登录用户是否和授权微博账号关联,用户可以选择是或否),就是这样一个页面。 我原本想让请求回调时直接跳转到这个页面,后来发现行不通,现在通过state这个参数就可以进行内部 重定向了。  

 QQ登录时,我设置的回调页是网站根目录,我可以在请求时,修改回调的的地址,只要是该根目录下的地址都没问题,相当于设置了多个回调地址吧。新浪微博的就不行。。

  感谢您的经验之谈,我哪里说的不对,还望指教。

ToBeStrong | 园豆:193 (初学一级) | 2013-12-03 15:47

@空葫芦: 嗯,我就是在已经登录的账户,在内部操作绑定时,处理回调页面时遇到的问题,我设置的回调页是登录时进行绑定或者注册并绑定的那个页面,现在在内部操作绑定,如果跳转到原有回调页,就不太合适了,因为用户还要输入自己的账号和密码。

ToBeStrong | 园豆:193 (初学一级) | 2013-12-03 15:53

@ToBeStrong:

 

这里面弯弯绕绕是不少的,如果时间不紧张,可以考虑先实现再优化。

可以用state,也可以用别的新加参数。

state是有预定义的作用的,用来规避csrf风险,不过你用他来达成你的需求也没什么。

http://blog.sina.com.cn/s/blog_56b798f801018jyb.html

空葫芦 | 园豆:9 (初学一级) | 2013-12-03 16:18

@空葫芦: 嗯,非常感谢,已经用state实现了我想要的结果,但是刚用自定义参数与替换state,发现不行额,回调的参数只有 code和state。

ToBeStrong | 园豆:193 (初学一级) | 2013-12-03 16:41

@ToBeStrong:使用多个参数时回调URL中的&参数要写成%26,或者你直接把callback这个URL给urlencode

空葫芦 | 园豆:9 (初学一级) | 2013-12-04 09:31
其他回答(1)
0

这个是不是可以自己来判断,如果是内部登陆,就跳转B页面

chenping2008 | 园豆:9836 (大侠五级) | 2013-12-03 14:17

回调页是在新浪开发者应用设置那里设置好的,程序内部好像控制不到,修改参数就报 misreturnurli...的错误。。

支持(0) 反对(0) ToBeStrong | 园豆:193 (初学一级) | 2013-12-03 14:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册