【发布时间】:2014-06-28 12:05:29
【问题描述】:
使用 FOSUserbundle,我想实现以下目标:
1) 用户提交带有“用户名”和“密码”参数的 POST。密码是明文。
2) 在控制器中,我照常解析参数:
/**
* @Route("/api/token",name="api_token")
*/
public function tokenAction(Request $request) {
$username = $request->get('username');
$password = $request->get('password');
// ...
}
3) 最后,如果凭据匹配,我会返回一些内容。
请注意,我想在不修改会话的情况下执行此操作,即不实际验证用户身份并设置令牌。我只想检查凭据是否匹配。
更新
接受的答案有效,但前提是您有一个活跃的会话。如果您想解决仅公开 REST 层等的情况(这是我的用例),假设您的用户名是唯一的,您可以执行以下操作:
/**
* @Route("/api/token",name="api_token", options={"expose"=true})
*/
public function getTokenAction(Request $request) {
$username = $request->get('username');
$password = $request->get('password');
$user = $this->getDoctrine()
->getRepository('YourUserClass')
->findOneBy(["username" => $username]);
$encoder = $this->get('security.encoder_factory')->getEncoder($user);
$isValidPassword = $encoder->isPasswordValid($user->getPassword(),
$password,
$user->getSalt());
if ($isValidPassword) {
// Handle success
} else {
// Handle error
}
}
【问题讨论】:
标签: php symfony authentication fosuserbundle