传递数组而不在url中显示它

时间:2013-12-12 15:38:46

标签: php arrays forms symfony

我想做什么:

我目前正在我的symfony2应用上通过LinkedIn OAuth安装身份验证。

在我的userController中,我有一个用于获取linkedin数据的函数,另一个用于创建新用户。

这创建一个新的用户函数可以处理linkedin用户(在作为参数传递的数组的帮助下)和非linkedin用户(通过POST请求中的表单):

public function createUserAction($from_linkedin = false, $linkedin_data = null)
{
    $user = new User();
    if(!from_linkedin) {
        // User comes from the registration form
        $user = $post_data,
    } else {
        // User comes from linkedin OAuth
        $user = $linkedin_data;
    }
    $em->persist($user);
    $em->flush();
 }

我想让我的linkedin OAuth用户选择一个密码,以便将来可以使用linkedin或标准的电子邮件/密码表单进行连接。我也觉得这更安全。

为了做到这一点,我创建了一个中间函数来向用户显示密码表单。此表格在linkedin呼叫之后和注册功能

之前显示
protected function chosePasswordAction($linkedin_data)
{
    $form = createForm(new ChosePasswordType);
    if($method = POST) {
        $linkedin_data["password"] = $post_data["password"];

        return createUserAction(true, $linkedin_data);
    }

    return $this->renderView("chosePassword.html.twig", array(
        'form' => $form,
        'data' => $linkedin_data,
    ));
}

我的问题是什么:

表单显示良好,但是当我在POST请求中从它返回时出错。缺少$ linkedin_data数组,因此chosenPassword()函数返回错误:

Controller "Bundle\Controller\UserController::chosePasswordAction()" 
requires that you provide a value for the "$linkedin_data" argument 
(because there is no default value or because there is a non optional 
argument after this one). 

我知道唯一的方法是将$ linkedin_data数组添加为路径表单中的参数,但它根本不会感到安全。如何在没有风险的情况下轻松通过?

1 个答案:

答案 0 :(得分:0)

既然我知道你在做什么,我会考虑在你第一次收到它时将数据存储在php的$_SESSION中。不要再费心来回发送它了。这不仅是hackish,而且容易被篡改,特别是如果你没有运行https,Linedin最有可能。

快乐的编码!