亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Symfony 4:不要重定向到 /login 來匹配路由

Symfony 4:不要重定向到 /login 來匹配路由

PHP
一只名叫tom的貓 2021-07-05 16:36:33
我有一個 Symfony 應用程序,它有兩個主要部分。 /(根下的所有內容eg /userProfile)和/api/(/api路由下的所有內容eg /api/userInfo/3)。我正在使用 Twig 在根目錄下渲染實際頁面,并JsonResponse在/api. 目前,當用戶在未登錄的情況下嘗試訪問任何頁面/資源時,他們會被重定向到/login他們請求的頁面/資源。我想為/api. 我想做的/api/whatever是返回請求的資源(如果已登錄),或者如果未登錄則返回 401。我想繼續重定向到/login所有其他路由。(注意:/api路由本身并不是“RESTful”API 路由。它們是 UI 用來請求呈現各種頁面所需的數據的“內部”API 路由。因此可以安全地假設用戶會通過以下方式登錄在他們的客戶請求這些路由之一之前的正常登錄表單。)這是我的security.yaml:security:    providers:        db_provider:            id: database_user_provider    encoders:        App\Utility\Security\DatabaseUser: bcrypt    access_decision_manager:        strategy: unanimous        allow_if_all_abstain: false    firewalls:        dev:            pattern: ^/(_(profiler|wdt)|css|images|js)/            security: false        main:            pattern: ^/            context: main            form_login:                provider: db_provider                login_path: login                check_path: process_login                default_target_path: manage                use_referer: true                failure_handler: App\Utility\Security\AuthenticationFailureHandler            user_checker: App\Utility\Security\UserChecker            anonymous: ~            logout:                path: logout                target: login            access_denied_handler: App\Utility\Security\AccessDeniedHandler  #Turn this off in dev.    # Easy way to control access for large sections of your site    # Note: Only the *first* access control that matches will be used    access_control:    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }    - { path: ^/forgot, roles: IS_AUTHENTICATED_ANONYMOUSLY }    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }    - { path: ^/%app.locales%, roles: IS_AUTHENTICATED_ANONYMOUSLY }    - { path: ^/, roles: ROLE_USER }如果我不包括login_path和 ,Symfony 會抱怨check_path。那么,我如何告訴 Symfony 在用戶未登錄(或會話已過期)時簡單地失敗并返回 401,何時(且僅當)他們訪問/api.
查看完整描述

3 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

要使其正常工作,請將api防火墻移至main.


然后我們可以security.yaml使用以下結構對其進行設置:


api:

  pattern: ^/api

  context: main

  stateless: false

  anonymous: true

  guard:

     authenticators:

        - App\Security\ApiAuthenticator

  provider: db_provider

我們需要的另一件事是AuthenticatorInterface. 例如App\Security\ApiAuthenticator


我們只需要實現從界面以下兩種方法: start和supports


public function start(Request $request, AuthenticationException $authException = null)

{

    return new Response('', Response::HTTP_UNAUTHORIZED);

}


public function supports(Request $request)

{

    return false;

}

注意:以上實現在 Symfony 4 (4.3) 上測試過


查看完整回答
反對 回復 2021-07-09
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

這就是我的安全性的樣子。它以您想要的方式工作,只是我使用 OAuth


firewalls:

    dev:

        pattern: ^/(_(profiler|wdt)|css|images|js)/

        security: false

    oauth_token:

        pattern:    ^/oauth/v2/token

        security:   false

    oauth_authorize:

        pattern:    ^/oauth/v2/auth

        form_login:

            provider: fos_userbundle

            check_path: /oauth/v2/auth_login_check

            login_path: /oauth/v2/auth_login

            use_referer: true

    api:

        pattern:    ^/api

        fos_oauth:  true

        stateless:  true

        anonymous:  false

    main:

        pattern: ^/

        form_login:

            provider: fos_userbundle

            csrf_token_generator: security.csrf.token_manager


        logout:       true

        anonymous:    true

        guard:

            provider: fos_userbundle

            authenticators:

                - App\Security\GoogleAuthenticator

                - App\Security\FacebookAuthenticator

            entry_point: App\Security\LoginFormAuthenticator


查看完整回答
反對 回復 2021-07-09
  • 3 回答
  • 0 關注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號