如何将用户重定向到身份验证对话框?
Posted
技术标签:
【中文标题】如何将用户重定向到身份验证对话框?【英文标题】:How to redirect a user to Auth Dialog? 【发布时间】:2011-11-18 16:45:44 【问题描述】:我按照步骤here
而且我的应用程序不会重定向用户
$app_id = APP_ID;
$canvas_page = APP_LINK;
$auth_url = "http://www.facebook.com/dialog/oauth?client_id=". $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,read_stream";
echo "<script> top.location.href='" . $auth_url . "'</script>";
PS:我成功地用<fb:redirect>
重定向了用户,但由于FBML 在几个月内将不受支持,我想找到另一种方法,“top.location.href”应该可以工作:(
【问题讨论】:
您在 URL 字符串中的 client_id 后面缺少一个 =。 【参考方案1】:您可能需要一个分号来执行代码。此外,等号是必要的。 (感谢David Barker)
$app_id = APP_ID;
$canvas_page = APP_LINK;
$auth_url = "http://www.facebook.com/dialog/oauth?client_id=". $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,read_stream";
echo "<script> top.location.href='" . $auth_url . "';</script>";
当你这样做时你会得到什么:echo "<script> alert('".$auth_url."');</script>";
?
另外,在 php 中更简单的方法是这样的:
$app_id = APP_ID;
$canvas_page = APP_LINK;
$auth_url = "http://www.facebook.com/dialog/oauth?client_id". $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,read_stream";
echo <<<EOT
<script>
top.location.href="$auth_url";
//checking the value of auth_url to see if that is the reason redirect is not happening.
if (window.console)
console.log("$auth_url");
else
alert("$auth_url");
</script>
EOT;
使用 heredoc 语法,您不必转义任何内容,您可以在其中使用单引号和双引号,并且变量在您的字符串中本质上被替换。 ;)
【讨论】:
感谢您的回复。但是这些解决方案中的任何一个都对我有用:(在 javascript 日志中我得到“错误:a93039401447_top 未定义”。我不明白为什么 Facebook 将“top.location.href”替换为“a93039401447_top.location.href”.. . PS:我在一个facebook应用程序中 事实上,就我而言(使用 FBML/FBJS 的应用程序),Facebook 自己替换了所有“标准”javascript。而且我认为没有等同于重定向人..(不允许..) 只要您的第一页本身不是重定向(如在 301 重定向中),您就应该很好。拉起 auth dialog/get 和 auth token 的推荐方法是执行 top.location.href javascript 重定向。您的代码可能还有其他问题吗? 事实上,如果我将应用程序的类型(在应用程序设置中)从“FBML”更改为“iframe”,这将有效。但如果我的应用程序是“FBML”,则 javascript 会被 Facebook 重写,我无法使用此重定向。我认为这就是他们创建以上是关于如何将用户重定向到身份验证对话框?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Firebase 身份验证和托管将登录用户重定向到子域?
带有访客和身份验证中间件的 Nuxt 身份验证将经过身份验证的用户在刷新时重定向到错误的页面