我研究了cookbook中有关安全性的章节,最接近的部分是如何使用API密钥验证用户。我不确定是否可以通过URL登录synfony。我尝试开发一个允许登录的服务,我想使用这样的URL:
mysite.com/login/user/password/token
在制作完整的代码之前,我试着做一个测试,并确保它的工作,我传递我的var与值在控制器的相同代码:
$_username="user";
$_password="password";
$this->redirect($this->generateUrl('subscriber_login_check'));
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
当我尝试在控制器上这样做时,我有以下错误:
无法找到路径"/login_check/"的控制器。也许您忘记在路由配置中添加匹配的路由?
我不知道我是否需要在其他文件中添加其他内容,或者这是不可能的。
谢谢
我可以找到一个解决方案来实现我的登录URL如下:mysite.com/user/password.
这是代码:
$path_info = $request->getPathInfo();
$router_parts = explode("/", $path_info);
$routerAux = $router_parts[1];
$routerAux2 = $router_parts[2];
if ($routerAux != ""){
$_username=$routerAux;
$user = $em->getRepository('myBundle:Entity')->findOneBy(array('field' => $_username));
if($user){
$token = new UsernamePasswordToken($user, $user->getPassword(), "public", $user->getRoles());
if($token){
if ($routerAux2 != ""){
$_password=$routerAux2;
$pass = $user->getPassword();
$pass1 ="";
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$pass1 = $encoder->encodePassword($_password, $user->getSalt());
if($pass==$pass1){
$var= 1;
}
}
}
}
}
}
return $this->render('Bundle:Pages:page.html.twig',array('var'=>$var));
}
基本上,该服务是通过URL发送用户名和密码来实现的,并首先在我的数据库中找到用户名,然后如果用户存在则获得密码。因为密码是加密的,所以继续加密过去的密码URL的值。一旦加密值,两个值之间进行比较,如果相等则返回true,如果不同则返回false。