当前位置: 首页 > 知识库问答 >
问题:

Symfony 4-JSON身份验证不起作用

马丰
2023-03-14

我试图在Symfony中基于这个文档构建一个json身份验证机制:https://symfony.com/doc/current/security/json_login_setup.html

这是我的保安,亚姆

security:
encoders:
    App\Entity\User:
        algorithm: bcrypt
providers:
    user_provider:
      entity:
        class: App\Entity\User
        property: username
firewalls:
    dev:
      pattern: ^/(_(profiler|wdt)|css|images|js)/
      security: false
    main:
      anonymous: ~
      json_login:
        check_path: login
      provider: user_provider
      logout:
        path: logout

这是我在安全控制器中的方法登录

class SecurityController extends Controller
{
    ...
    /**
     * @Route("/login", name="login")
     * @return Response
     */
    public function login()
    {
        return new Response('Lala');
    }
    ...
}

这是我的登录表

<form class="form" id="login-nav">
<div class="form-group">
    <label class="sr-only" for="username">Login</label>
    <input id="username" class="form-control" placeholder="Login" required
           name="_username">
</div>
<div class="form-group">
    <label class="sr-only" for="password">Password</label>
    <input type="password" class="form-control" id="password" placeholder="Hasło" required
           name="_password">
    <div class="help-block text-right">
        <a href="">Forgot password?</a>
    </div>
</div>
<div class="form-group">
    <a id="login-submit" class="btn btn-primary btn-block">Sign in</a>
</div>
<div class="checkbox">
    <label>
        <input type="checkbox"> Remember me
    </label>
</div>

下面您可以看到我发送给控制器的AJAX请求

$('#login-submit').click(function() {
    let username = $('#username').val();
    let password = $('#password').val();
    let data = JSON.stringify({username: username, password: password});
    $.ajax({
        url: '/login',
        type: 'POST',
        dataType: 'json',
        data: data,
        success: function (data, status) {
            console.log("DATA", data);
        }
    });
});

我收到200状态从服务器,但什么也没发生。安全认证机制完全没有反应。而ajax中的成功方法是不调用的。我不知道为什么。我在互联网上搜索了很多,但在Symfony中几乎没有关于json身份验证的信息。在Symfony文档上只有一个简短的描述。

共有1个答案

夏理
2023-03-14

我能够确定这个问题。只有当请求头设置为Content-Type: Application/json时才会发生拦截:

在控制台中尝试以下操作:

curl -X POST -H "Content-Type: application/json" http://localhost:8000/login_check -d '{"username":"philipp","password":"test"}'

在您的情况下,这应该可以解决问题:

$('#login-submit').click(function() {
    let username = $('#username').val();
    let password = $('#password').val();
    let data = JSON.stringify({username: username, password: password});
    $.ajax({
        url: '/login',
        type: 'POST',
        contentType: "application/json",
        dataType: 'json',
        data: data,
        success: function (data, status) {
            console.log("DATA", data);
        }
    });
});
 类似资料:
  • 我已经在我的xamarin Android应用程序中实现了脸书认证,一切都很好。我从facebook获得令牌,并使用firebase rest Api的sigin方法,我能够sigin到firebase,并从firebase Api收到一个访问令牌,作为JWT。但是,当我想在我的Web Api核心上使用这个访问令牌时,它总是返回not authenticated。我的Web Api核心使用下面基于

  • 我的jwt身份验证有问题。 我试图从rest api获取模板列表,但是当我试图访问标题'Authorization'时,值为NULL。下面是我的代码: 前缀和令牌都设置好了,当我将它们记录在控制台中时,我可以看到它们。

  • 在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?

  • 我们现在正在进行的项目是使用SAML令牌通过ADFS进行单点登录<此项目应遵循以下基本规则: 1。代理使用其凭据登录到windows 2。代理登录到web应用程序(依赖方) 3。web应用程序应重定向到ADFS中的STS(Active Directory是身份提供程序),并使用代理在其windows身份验证(无缝身份验证)中使用的凭据登录 4。因此,不应显示STS登录页面,并且应验证用户身份。之后

  • 问题内容: 我正在使用sencha touch,HTML5和phonegap作为包装的移动Web应用程序。 我正在使用PHP身份验证(Cookie)和ajax请求。一切都可以在Safari或chrome上正常运行,但是在通过phonegap(webview)进行部署后,它不再起作用了… 任何帮助,将不胜感激 :) 一些更多的细节: 我的应用程序的所有数据都通过ajax请求加载到服务器组件“ mob

  • 我正在尝试为没有ssl的Kafka集群启用SASL用户名和密码。我按照这个Stackoverflow的步骤: Kafka SASL 动物园管理员身份验证 SASL认证似乎对Kafka经纪人有效。消费者和生产者在写入或读取主题之前必须进行身份验证。到目前为止一切顺利。 问题在于在 kafka 上创建和删除主题。例如,当我尝试使用以下命令时: 我能够列出kafka集群中的所有主题,并创建或删除任何无需