【问题标题】:Problem holding a session API on symfony from a client来自客户端的 symfony 会话 API 问题
【发布时间】:2019-01-16 12:54:48
【问题描述】:

我正在使用 symfony 制作一个 API,并尝试实现一个身份验证系统来限制某些路由的使用。

使用 Postman,我可以以用户身份登录,之后我可以为用户使用受限路由并且它可以工作,它会返回一个令牌:

[邮递员结果][1]

但是当我尝试从我的客户端(在 js 中)建立连接时,日志会返回一条带有我的令牌的成功消息:

    Succes 
Object { token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1NDc2NDI1OTgsImV4cCI6MTU0NzY0NjE5OCwicm9sZXMiOlsiUk9MRV9BRE1JTiJdLCJ1c2VybmFtZSI6ImFkbWluQGFkbWluLnJvb3QifQ.XK3DRjxom1AwJe7hCh7xM43Y1SbpHrRNvSmu26oH_c0xJib5Rp3AkVcoY6-F8Flb3R3dICs4OPqckhCtT-GbPFO5WjFamCXhVEKQd5m3s90Kbsb0e3WPtbpuzfMdZzYf5QTRnydugzzhtb4HPzKch94zDDyEoTc-NbgwQSjycXW3NN8b_gWjKquUjwvIopyYtHlc3rsQKZp6pWbT-MZ0GvcpVHCQb0ce-yXYOwJb92qmPMh0pUFuTZWt33SayyX0yIRjDxCWk9QM9-ZtqntojtI_z5nNWeetoFstReY9W5aGsSpmXV-HD3xNftWsDfnKxv07mnvQ_GrNtgWtcRQ-2oTmdvV-0Sxkw_fNLnwjyUrF8wL38aEH7q7E2yXhtH5lLj_lXmf64o0DXih6Po6JlXDB4KTLKdpWvzIGAu0-R0atYyAnW14H-OjUIvdkN2q_3DZQ2F6VUJHrb0GAb04QUufrSbXVrWuZcD7PMuaw7iks8jpa6y6DuSiPKeE721OdKr3j5CWXXZ6htQ5sQT01FrZEcnY9ojT302AodkHFmSiqgUmpvQpNwSFhEfwWJQDDJY835Y7SyN-rwLprTaWgrWxiCa7E21PkWLD9f-9KZzwrHjWdN9Os_Tu2_oA2cGcBVzp7vG3Vo2iyn6SNFb075U4MiVMSWvGkcYuf2_Mav04" }

但是当我尝试为用户使用受限路线时,我不能。我有这个:

Success: 
{"error":{"code":401,"message":"Unauthorized","exception":[{"message":"Full authentication is required to access this resource.","class":"Symfony\\Component\\HttpKernel\\Exception\\HttpException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"/home/nolan/testprojetphp/php-projet-lp/vendor/symfony/security-http/Firewall/ExceptionListener.php","line":175,"args":[]},{"namespace":"Symfony\\Component\\Security\\Http\\Firewall","short_class":"ExceptionListener","class":"Symfony\\Component\\Security\\Http\\Firewall\\ExceptionListener","type":"->","function":"startAuthentication","file":"/home/nolan/testprojetphp/php-projet-lp/vendor/symfony/security-http/Firewall/ExceptionListener.php","line":130,"args":[["object","Symfony\\Component\\HttpFoundation\\Request"],["object","Symfony\\Component\\Security\\Core\\Exception\\InsufficientAuthenticationException"]]},{"namespace":"Symfony\\Component\\Security\\Http\\Firewall","short_class":"ExceptionListener","class…

我的客户的正常请求如下所示:

function ajaxSupprimer(url) {
fetch(url, {
    method: 'DELETE',
}).then(refresh);

这是我的安全文件:

security:
encoders:
    App\Entity\Ussers: bcrypt

providers:
    our_db_provider:
        entity:
            class: App\Entity\Ussers
            property: email
firewalls:

    login:
        pattern:  ^/
        stateless: true
        anonymous: true
        json_login:
            check_path:               /login
            success_handler:          lexik_jwt_authentication.handler.authentication_success
            failure_handler:          lexik_jwt_authentication.handler.authentication_failure
        logout:
            path: security_logout
    api:
        pattern:   ^/
        stateless: true
        lexik_jwt:
            authorization_header: # check token in Authorization Header
                enabled: true
                prefix:  Bearer
            throw_exceptions:  false     # When an authentication failure occurs, return a 401 response immediately
            create_entry_point:      true      # When no authentication details are provided, create a default entry point that returns a 401 response
            authentication_provider: lexik_jwt_authentication.security.authentication.provider

role_hierarchy:
    ROLE_ADMIN:     ROLE_USER

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

access_control:
    # Les regles de securité
    # Là dans ce cas seul les utilisateurs ayant le rôle ROLE_ADMIN
    # peuvent acceder à toutes les pages commençant par /admin
    - { path: '^/admin', roles: ROLE_ADMIN }
    - { path: '^/user', roles: ROLE_USER }

【问题讨论】:

  • 我们需要更多信息。你能发布你的 security.yml 文件吗?
  • key,它给你提供了token,你下次请求的时候用这个token吗?
  • @DevDonkey 抱歉添加
  • @Eakethet 不,我真的不知道如何使用它,邮递员不需要随请求一起发送
  • @Nono45 Postman 使用它,看看授权,它添加了标题 - “授权:承载者检索令牌”。登录 => 获取令牌 => 存储令牌 => 使用令牌进行下一次请求

标签: javascript php api symfony


【解决方案1】:

我用

解决问题

这种情况下的请求可能是function ajaxSupprimer(url) { fetch(url, { method: 'DELETE', headers: new Headers({ ''Authorization': 'Bearer '+mytoken, 'Content-Type': 'application/json' }), }).then(refresh);

我已经看到,对于您正在使用的身份验证提供程序,关键是“授权”

【讨论】:

猜你喜欢
  • 2022-07-28
  • 1970-01-01
  • 2014-05-15
  • 2023-02-13
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多