如何通过URL登录symfony


How to login into symfony by URL

我研究了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。