gpt4 book ai didi

php - 如何以编程方式登录/验证用户?

转载 作者:IT王子 更新时间:2023-10-29 00:38:59 24 4
gpt4 key购买 nike

我想在注册过程结束后立即让用户登录,而不是通过登录表单。

这可能吗?我找到了一个使用 FOSUserBundle 的解决方案,但我没有在我实际从事的项目中使用它。

这是我的 security.yml,我正在使用两个防火墙。纯文本编码器仅用于测试。

security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Ray\CentralBundle\Entity\Client: md5

role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
in_memory:
users:
admin: { password: admin, roles: [ 'ROLE_ADMIN' ] }
entity:
entity: { class: Ray\CentralBundle\Entity\Client, property: email }

firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false

user_login:
pattern: ^/user/login$
anonymous: ~

admin_login:
pattern: ^/admin/login$
anonymous: ~

admin:
pattern: ^/admin
provider: in_memory
form_login:
check_path: /admin/login/process
login_path: /admin/login
default_target_path: /admin/dashboard
logout:
path: /admin/logout
target: /

site:
pattern: ^/
provider: entity
anonymous: ~
form_login:
check_path: /user/login/process
login_path: /user/login
default_target_path: /user
logout:
path: /user/logout
target: /

access_control:
- { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user, roles: ROLE_USER }
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

最佳答案

是的,您可以通过类似于以下的方式来做到这一点:

use Symfony\Component\EventDispatcher\EventDispatcher,
Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken,
Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

public function registerAction()
{
// ...
if ($this->get("request")->getMethod() == "POST")
{
// ... Do any password setting here etc

$em->persist($user);
$em->flush();

// Here, "public" is the name of the firewall in your security.yml
$token = new UsernamePasswordToken($user, $user->getPassword(), "public", $user->getRoles());

// For older versions of Symfony, use security.context here
$this->get("security.token_storage")->setToken($token);

// Fire the login event
// Logging the user in above the way we do it doesn't do this automatically
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);

// maybe redirect out here
}
}

当您将 token 设置到上下文中时,最后触发的事件不会自动完成,而通常在使用登录表单或类似表单时会自动完成。因此将它包括在这里的原因。您可能需要根据您的用例调整使用的 token 类型 - 上面显示的 UsernamePasswordToken 是核心 token ,但您可以根据需要使用其他 token 。

编辑:根据下面 Franco 的评论,调整以上代码以解释“public”参数,并将用户角色添加到代币创建中。

关于php - 如何以编程方式登录/验证用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550079/

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