无法使用FOSUser捆绑软件验证用户身份

时间:2016-10-30 18:06:53

标签: angularjs symfony fosuserbundle

我正在后端使用Symfony 2.8创建一个Angularjs应用程序,使用FOSUser包进行用户管理。

我有一个控制器来检查用户登录并创建用户会话,但是当我尝试创建用户会话时,symfony会返回以下错误消息:

Controller "UserBundle\Controller\LoginController::indexAction()" requires that you provide a value for the "$session" argument (because there is no default value or because there is a non optional argument after this one).

有我的控制器代码:

<?php

namespace UserBundle\Controller;

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use UserBundle\Entity\User;

class LoginController extends Controller
{
    public function indexAction(Session $session)
    {
        $arrResult = array('STATUS' => 'ERROR', 'ERROR' => 'INIT', 'DATA' => array() );

        // get post data
        $postData = file_get_contents("php://input");
        $postData = json_decode($postData, TRUE);

        $email      = $postData['email'];
        $password   = $postData['password'];

        if( empty($email) || empty($password) ) 
        {
            $arrResult['ERROR'] = 'ALL_FIELDS_ARE_REQUIRED';
            return new JsonResponse($arrResult);
        }

        $user_manager = $this->get('fos_user.user_manager');
        $factory = $this->get('security.encoder_factory');

        $user = $user_manager->findUserByEmail($email);
        $encoder = $factory->getEncoder($user);
        $salt = $user->getSalt();

        if( $encoder->isPasswordValid($user->getPassword(), $password, $salt) )
        {
            // create user session
            $this->createLoginSession($session, $user);

            $arrResult['DATA'] = array('USERNAME' => $user->getUsername());
            $arrResult['STATUS'] = 'OK';
        }
        else 
        {
            $arrResult['ERROR'] = 'INVALID_CREDENTIALS';
        }

        return new JsonResponse($arrResult);
    }

    private function createLoginSession($session, $objUser)
    {
        $objToken = new UsernamePasswordToken($objUser, null, 'main', $objUser->getRoles() );

        // save token
        $objTokenStorage = $this->get("security.token_storage")->setToken($objToken);
        $session->set( '_security_main', serialize($objToken) );
    }
}

我做错了什么?

谢谢!

0 个答案:

没有答案