1

ファイルではsecurity.yaml、さまざまなルートのアクセス制御と、同じルートにアクセスできる ROLES を定義します。

しかし、ログインしているが、ログアウトして「ROLE_USER」が「anon」に変更されない限り、/login ページに再アクセスできないユーザーを設定するにはどうすればよいでしょうか。

私はSymfony 4.2が初めてです。

コントローラ:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
//use Symfony\Component\Security\Core\Exception\AccessDeniedException;

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="login")
     */
    public function login(Request $request, AuthenticationUtils $utils, AuthorizationCheckerInterface $authChecker)
    {
        // to check whether user is looged-in
        if ($authChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
            die('Logged in user cannot access this page');
        }
        // get the login error if there is one
        $error = $utils->getLastAuthenticationError();

        // last username entered by the user
        $lastUsername = $utils->getLastUsername();
        return $this->render('security/login.html.twig', [
            'last_username' => $lastUsername,
            'error' => $error
            ]);
    }

    public function logout()
    {
        # code...
    }
4

2 に答える 2

2

を編集して、ログインしているユーザーのログイン ページへのアクセスを拒否することはできませんsecurity.yml。ログインしているかどうかに関係なく、Symfony アプリのすべてのユーザーが基本アクセス権限を持ちますIS_AUTHENTICATED_ANONYMOUSLY。Symfony には、ログインしていないユーザーに対する排他的な役割はありません。

ただし、ユーザーがコントローラーにログインしているかどうかを確認し、リダイレクトを実行するか、次のようにスローすることで、同じことを実現できますAccessDeniedException

public function login($name, AuthorizationCheckerInterface $authChecker)
{
    if ($authChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
        throw new AccessDeniedException('Logged in user cannot access this page');
    }

    // ...
}
于 2019-03-27T05:18:17.130 に答える