gpt4 book ai didi

security - 如何使用 symfony2 安全性实现自定义编码

转载 作者:行者123 更新时间:2023-12-02 22:13:45 25 4
gpt4 key购买 nike

所以我遇到的问题如下:目前,我的 symfony2 项目有一个用户实体,它有自己的方法来加密数据库中的密码:

private function blowfishCrypt($password,$cost)
{
$chars='./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$salt=sprintf('$2a$%02d$',$cost);
//Create a 22 character salt -edit- 2013.01.15 - replaced rand with mt_rand
mt_srand();
for($i=0;$i<22;$i++) $salt.=$chars[mt_rand(0,63)];
return crypt($password,$salt);
}

public function encryptPassword($string)
{
$this->setEncryptedPassword($this->blowfishCrypt($string, 10));
}

登录方法基本上只是检查输入的密码,如下所示:

if (crypt($userPost['password'], $user->getEncryptedPassword()) != $user->getEncryptedPassword())

然后它设置 session 变量,authTokenuserId

但正因为如此,在整个应用程序中必须进行调用以确保在 session 中设置 userId 和 authToken - 因此我们希望经过身份验证的用户只能访问的任何操作都必须进行如下检查:

if (!authToken) { return 401 } //not exactly, but you get the idea.

我清理所有这些检查的临时解决方案是创建一个接口(interface),我的所有 Controller 都可以实现该接口(interface),该接口(interface)将在 Controller 操作之前运行一些代码,并且如果用户未登录,则可以返回重定向。我想要什么要做的就是重写所有这些,以便我可以利用 symfony2 的安全层。我怎样才能做到这一点?

编辑:我有一个从同一代码库运行的单独门户,该门户为用户使用完全不同的表(如管理门户)。假设上述情况是可能的,那么 symfony2 的安全功能是否可以实现这一点?

编辑2:试图将这一切集成起来,所以我认为第一步是在我的用户实体中实现 UserInterface 。我已经做到了,这是我的 security.yml:

security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
access_control:
- { path: ^/., roles: IS_AUTHENTICATED_FULLY }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login_check.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/signup.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
providers:
main:
entity:
class: BundleNamespace\Entity\User
property: email
encoders:
Symfony\Component\Security\Core\User\User: plaintext

我遇到了无限循环。基本上我需要用户能够在不登录的情况下访问/、/login、/signup 等。几乎所有其他页面都需要经过身份验证的用户。我还没有使用自定义密码编码器,我想这将是我的最后一步。我想解决这个重定向循环问题。有什么想法吗?

最佳答案

您必须使用自定义编码器,而不是放在用户实体之上的自制东西...

看看:https://stackoverflow.com/a/8175657/2858398

然后您可以将 native symfony 连接方法与自定义密码编码器一起使用。

关于security - 如何使用 symfony2 安全性实现自定义编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com