如何在Symfony 3.4中生成令牌

时间:2018-06-15 14:47:23

标签: php symfony-3.4

我的symfony 2.7更新到symfony 3.4。 我在Symfony 2.7中使用了函数generateToken()来为文件上传任务创建一个令牌。我找到了有关symfony 3.4 Securely Generating Random Values 的信息。但我如何整合呢?

我可以使用以下声明吗?

<?php
if (isset($_POST['submit_btn'])) {
    $weight = $_POST['weight'];
    $sql = "SELECT weight_id FROM parcel_weight WHERE weight = '$weight'";
    $result = mysqli_query($conn, $sql);
    $resultCheck = mysqli_num_rows($result);
    $row = mysqli_fetch_assoc($result);
    echo $row['weight_id'];
}
?>  
<form method="post" action="">
    <select class="weight" name="weight" id="weight">
        <option>Weight of parcel</option>
        <?php
        $res = mysqli_query($conn, "SELECT * FROM parcel_weight");
        while ($row = mysqli_fetch_array($res)) {
            $weight = $row['weight'];
            echo "<option value=\"$weight\">$weight</option>";
        } 

        ?>
        </select>
    <div id="submitBtn">
        <input type="submit" name="submit_btn" id="submit_btn" value="Submit" />
    </div> 
</form>

generateToken Symfony 2.8

1 个答案:

答案 0 :(得分:2)

我知道这可能会晚了,但希望它将对其他方面有所帮助,因为symfony中没有开箱即用的功能可用于生成令牌。

所以当我遇到此问题时我所做的是,我使用了FOSUserBundle所使用的同一令牌生成器,这是这样的:

public function generateToken()
{
    return rtrim(strtr(base64_encode(random_bytes(32)), '+/', '-_'), '=');
}

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Util/TokenGenerator.php

,如您所见,它使用了官方documentation of symfony中推荐的random_bytes()函数和php函数base64_encode()结合使用,旨在使二进制数据在通过传输层的传输中幸免于难并非8位纯净格式,例如the official php documentation中说明的邮件正文,并且它们正使用此example