前端登录:重定向到用户创建的帖子

Posted

技术标签:

【中文标题】前端登录:重定向到用户创建的帖子【英文标题】:Front end login: Redirect to user created post 【发布时间】:2013-02-07 00:44:49 【问题描述】:

是否可以将前端登录的用户重定向到他们创建的帖子?如果有怎么办?

我在前端下面有表格,非常适合登录人员,但并不能完全实现我想要的东西。

我已经创建了一个前端注册过程,它创建一个新用户和帖子,并将某些细节填充到该帖子中。完成该过程,它们被发送到刚刚创建的帖子,然后允许它们前端编辑所有细节。这适用于第一次注册人,但我无法通过已经注册并想要登录的人来实现我想要的东西。

当他们在下面的表单上填写他们的详细信息时,我希望它将其重定向到他们注册时创建的帖子,这可能?

用户只能创建 ONE 帖子...充当个人资料。所以我希望他们能够登录并被重定向到他们的个人资料。

如果有帮助,用户名与POST标题相同(用户名是人员名称,这也是帖子的名称)。例如,用户名 = 我的公司。帖子标题 = 我的公司。

            <?php if (!(current_user_can('level_0'))) ?>   
                <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post" id="login-form">
                    <p style="color:black!IMPORTANT;">Please login.</p>
                    <!--[if !(IE)]><!-->
                        <input type="text" placeholder="Username" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" />
                    <!--<![endif]-->
                    <!--[if (gte IE 6)]>
                        <input type="text" name="log" id="log" value="Username" />
                    <![endif]-->
                    <!--[if !(IE)]><!-->
                        <input type="password" placeholder="Password" name="pwd" id="pwd" />
                    <!--<![endif]-->
                    <!--[if (gte IE 6)]>
                        <input type="password" value="Password" name="pwd" id="pwd" />
                    <![endif]-->    
                    <p style="clear:both;width:115px;font-size:14px!IMPORTANT;float:left;">
                        <input style="width:14%!IMPORTANT;" name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Remember me
                    </p>


                    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
                    <p style="float:right;">
                        <a style="font-size:14px!IMPORTANT;" href="<?php echo get_option('home'); ?>/wp-login.php?action=lostpassword">Recover password</a>
                    </p>                                
                    <input style="margin-left:80px;float:left;" type="submit" name="submit" value="LOGIN" class="login-button" />                               
                </form>
                <div class="clear"></div>
            <?php  else  ?>
                <p>
                    You are currently logged in, would you like to <a href="<?php echo wp_logout_url($_SERVER['REQUEST_URI']); ?>">logout</a>?
                </p>
            <?php  ?>  

我猜下面...

我需要对用户名(在上面的表格中输入)做一些事情,然后将其与任何帖子的作者匹配,如果匹配则将它们发送到该页面......所有这些都在提交上面的表单之前。这需要在隐藏字段之前完成,这样才能将用户名字段输入隐藏输入值。

【问题讨论】:

我讨厌“这可能吗?”这个问题。作为一个程序员,你会发现任何有电脑的东西都是可能的,唯一的问题是,“我有时间去做吗?” span> 登录成功后在wp-login.php内重新路由用户有什么问题?您可以使用 header(..) 进行 php 重定向 @Garreh 隐藏字段实际上是重定向的部分。目前它只是让用户登录并重新加载同一页面。 【参考方案1】:

由于用户只能发布一个帖子,因此您肯定有一个链接或方法来检测它,例如存储在数据库中的某些内容。您可以做的是在测试凭据是否正确时,找到链接,然后覆盖重定向。您甚至不需要在用户登录之前知道链接并将其隐藏,这是不可能的。

例子:

<?php
   ...get variables...;
   if( isValidUser())
      $var = db->getUserPostId();
      $redirect = "posts.php?pid=".$var;
      header("Location: $redirect");
   else
      .. show error and go back..
?>

编辑: javascript 示例

<script>
    function onSubmit()
        document.forms["login"]["redirect_to"].value = document.forms["login"]["log"].value;
    
</script>
<form name="login" action="test.php" method="post" onsubmit="onSubmit()">
    <input type="text" name="log">
    <input type="password" placeholder="Password" name="pwd" id="pwd" />
    <input type="hidden" name="redirect_to" value="start">
    <input type="submit" name="submit" value="Login">
</form>

该示例将在提交表单之前更改隐藏字段的值。您可以根据需要构建链接,该示例仅使用用户名。

【讨论】:

我有一个两步表单,如果公司名称是唯一的,则仅允许用户进入第二步 - 这意味着每个帖子都有一个唯一的名称。在问题的表格中 - 隐藏字段是重定向用户的内容。它需要将操作设置为它的样子,因为 Wordpress 在后台做了一些我真的不想碰的事情。 您想要的问题是您将不得不深入研究登录代码。在他们登录之前不可能知道谁将登录,因此无法准备好链接。您可以找到“猜测”的方法,但不建议这样做。 难道没有办法通过 jquery 获取他们输入的用户名并将其放在隐藏输入值的末尾吗?因为用户名与帖子链接相同(因为它是标题)。 这非常有效,谢谢。我需要调整的一件事是用破折号替换空格。不太确定该怎么做,所以我可能会问一个新问题。【参考方案2】:

这当然是可能的。您可以使用 php 的 $_SERVER 方法获取当前页面的 url。这是一个教程 - PHP: How to Get the Current Page URL

然后您可以使用GET 方法将此数据传递到登录表单页面,以便登录页面(包含登录表单)可以捕获此url。然后,您可以将此 url 数据作为隐藏字段包含在登录表单中,或者作为操作目标 php 文件(如&lt;form method="post" action="target.php?targeturl=someurl.com/somepage")的一部分,其中表单的目标脚本文件可以读取此 url。然后处理完登录数据后,处理脚本可以将浏览器重定向到目标url。

【讨论】:

【参考方案3】:

解决问题的简单方法是,一旦用户重定向到特定页面,例如编辑帖子页面或编辑个人资料页面。您需要按会话保存页面的URL。

$_SESSION['refpage'] = getPageUrl(); // this is your function that will return a current page url.

用户登录后,检查会话 $_SESSION['refpage'] 是否存在,如果找到则重定向他,例如 redirect("location:".$_SESSION['refpage'])

【讨论】:

以上是关于前端登录:重定向到用户创建的帖子的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cognito 内置登录重定向问题

停用的用户重定向到从 ajax 请求登录

登录django后如何将用户重定向到用户特定的url?

Symfony 登录表单根据用户角色重定向

正确登录后如何重定向用户?

如果用户已登录,则重定向