dongni8124 2016-06-04 12:07
浏览 60
已采纳

Symfony不保存手动登录

I have create a manual in-code login method. The function at the page works.

The profiler says I am correctly authenticated.

But Symfony does not save the session / the login correct. If I visit a page they is only for ROLE_USER, I get the Full authentication is required to access this resource. Message and the user in the previous login was not saved (Symfony use anonymous token).

Here my login action:

namespace ###HIDDEN###\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\User\User;

class AutoLoginController extends Controller
{
    /**
     * @Route("/auto-login")
     */
    public function indexAction(Request $request)
    {
        if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {

            $user = new User("Marcel", null, array('ROLE_USER'));

            $token = new UsernamePasswordToken($user, null, "main", $user->getRoles());

            $this->get("security.token_storage")->setToken($token);

            $event = new InteractiveLoginEvent($request, $token);
            $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);

            return new Response("<body>Logging in!</body>");
        }

        return new Response("<body>You already logged in!</body>");
    }
}

I am using Symfony 2.8 LTS version.

  • 写回答

1条回答 默认 最新

  • duanlu7223 2016-06-04 13:25
    关注

    Make sure your User class implements the UserInterface (documentation).

    It must return the roles a user has, either statically or set from a persistent storage like a database.

    Also remember to check the Web Profiler to see the authentication details, and the granted roles to the current authenticated user.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号