0

私は Symfony2.8 で FOSOAuthServerBundle を正常に実装しましたが、うまくいきました。Symfony3.2 で動作させようとすると、エラーが発生しました:

名前空間「Symfony\Component\Security\Core」からクラス「SecurityContext」をロードしようとしました。別の名前空間の「use」ステートメントを忘れましたか?

だから私はググって、SecurityContextがSymofny 3.2にはもう存在しないことを知っています。しかし、FOSOAuthServerBundle の公式ドキュメント「A Note About Security」には、symfony2 でのみコンパクト化できる関数 loginAction() がまだ存在します。

質問: - このバンドルを Symfony 3.2 で使用できますか? - はいの場合、それを行う方法、またはより良い例はありますか?

回答ありがとうございました

4

2 に答える 2

3

FOSOAuthServerBundle の詳細がわかりません。しかし、a_note_about_securityにあるバンドルのドキュメントの例は時代遅れだと思います。

security.context サービスは symfony 2.6 から廃止されました。ここで変更の説明を見つけることができます: symfony.com/blog/new-in-symfony-2-6-security-component-improvements

あなたはと交換しようとすることができ\Symfony\Component\Security\Core\SecurityContextます\Symfony\Component\Security\Core\Security

<?php
// src/Acme/SecurityBundle/Controller/SecurityController.php

namespace Acme\SecurityBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Security;

class SecurityController extends Controller
{
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(Security::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(Security::AUTHENTICATION_ERROR);
            $session->remove(Security::AUTHENTICATION_ERROR);
        }

        // Add the following lines
        if ($session->has('_security.target_path')) {
            if (false !== strpos($session->get('_security.target_path'), $this->generateUrl('fos_oauth_server_authorize'))) {
                $session->set('_fos_oauth_server.ensure_logout', true);
            }
        }

        return $this->render('AcmeSecurityBundle:Security:login.html.twig', array(
            // last username entered by the user
            'last_username' => $session->get(Security::LAST_USERNAME),
            'error'         => $error,
        ));
    }
}
于 2016-12-09T15:01:25.407 に答える