php - 浏览器不遵循来自 AJAX 响应的重定向(PHP 生成的响应使用 CAS 身份验证)

标签 php jquery ajax cas

好的,看来我最初的问题有误。所以,这里有一些更正。答案仍然适用,因为当协议(protocol)更改为 HTTPS (SSL) 时,第二次重定向将停止。

在我的例子中,我的重定向发生了多次,而浏览器没有遵循第二次重定向。 遵循第一个重定向但返回错误。

我一直在阅读包含重定向的 JavaScript AJAX 响应会自动遵循,但在我的情况下似乎并非如此。浏览器自动跟随第一个重定向,返回第一个重定向而不跟随 header 中的第二个重定向。我的问题是我希望浏览器自动跟踪所有重定向。

重定向是 phpCAS 库的一部分。我有一个用 PHP 编写的 API,它每次都在返回结果之前检查用户身份验证。

这是顺序。需要注意的主要事情是,浏览器在执行 1 次重定向后返回第二个响应。当我对 localhost/example/api 进行 AJAX 调用时,我更希望它一直运行并返回最后一个响应。

本地主机/示例

  • 使用 jQuery.ajax() 调用 localhost/example/api

响应 1:localhost/example/api

  • 重定向到 https://localhost/accounts/cas/login?service=api.example.com&gateway=true(使用 SSL)。

响应 2:(SSL) localhost/accounts/cas/login?service=api.example.com&gateway=true

  • 当存在查询键“网关”时,登录会简单地重定向回“服务”键提供的 URL,无论是否有票证(向服务发出用户登录或未登录的信号)。

响应 3:localhost/api?ticket=TICKET

  • 验证票证并在没有票证的情况下重定向回自身。

响应 4:localhost/api

  • 这次 CAS 客户端查看 $_SESSION 以记住票证是什么,然后处理返回 JSONP 的 API 请求。

我在 OpenID 或 OpenAuth(orization) 上使用 CAS 没有特别的原因。 CAS 只是我能够在 WordPress 中使用的第一个身份验证模块。我愿意接受有关使用不同的身份验证库、CMS、框架等方面的建议。尽管如此,我希望只是完成这个项目。因此,重新加工越少越好。

最佳答案

正如您后来在评论中添加的那样发现自己,ajax 请求受制于 same origin policy。 .

是的,您可以使用 JSONP - 但是,如果您有幸只支持 IE8 及更高版本,CORS可能是更好的解决方案。

基本上,添加标题如

access-control-allow-origin: http://api.example.com
access-control-allow-credentials: true

对于您的服务器回答,您可以解决跨源策略。

另见 jQuery ticket使其能够与 jQuery 一起工作。

关于php - 浏览器不遵循来自 AJAX 响应的重定向(PHP 生成的响应使用 CAS 身份验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047584/

相关文章:

php - fatal error : Call to undefined function mysqli_connect()

javascript - 单击使用 AJAX 加载的 div 的选择器 - jQuery

javascript - 在目标 div 中打开链接

php - MySQL 大请求在 AJAX 中不起作用,需要 LIMIT,而在直接 PHP 中工作

php - 自动提交表单 (cURL)

php - 带中间件的 Laravel 5.2 嵌套路由组

php - php mysql 中的分页

javascript - $ ('<div>' )[0] 和 <div></div> 之间的区别?

javascript - cookie 的设置值 - 名称中的冒号

jquery - 动态纬度/经度转换为开放层脚本