2017-12-25 10 views
2

を働いていない: https://symfony.com/doc/current/security/json_login_setup.htmlsymfonyの4 - JSON認証は、私は、このドキュメントに基づかsymfonyにおいてJSON認証メカニズムを構築しようとしています

ここに私のsecurity.yamlここ

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リクエストを見ることができるの下に私は、サーバーから200のステータスを受け付けておりますが、何も起こりません

$('#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); 
     } 
    }); 
}); 

をコントローラに送信しています。セキュリティ認証メカニズムはまったく反応していません。そして、ajaxの成功メソッドは呼び出されません。どうしてか分かりません。私はインターネット上で多くのことを探していましたが、Symfonyではjson認証に関する情報はほとんどありません。 Symfonyのドキュメントには、簡単な説明しかありません。

+0

あなたは '追加しましたあなたのキー 'json_login'の' security.yaml'に対する 'username_path:security.credentials.login'と' password_path:security.credentials.password'を(ドキュメンテーションのように)アドバイスしますか? – baris1892

+0

ねえ。私のAJAXリクエストからわかるように、私は最も単純な形式のJSONを送ります: '{" username ":" dunglas "、" password ":" MyPassword "}' 'username_path 'password_path' ドキュメントからの引用: JSONドキュメントの構造が異なる場合、' username_path'と 'password_path'キーを使用して、ユーザー名とパスワードのプロパティにアクセスするパスを指定することができます。パスワード)。 –

+0

これについての解決策をお探しですか?おそらくこの問題はコントローラが空でなければならないことを明示しているので、空のコントローラではないのでしょうか?http://symfony.com/doc/current/security/json_login_setup.html 私は現在同じ問題を抱えていますが、わかりませんどのように続行する。 – user3507003

答えて

1

問題を特定できました。

はあなたのコンソールでこれを試してください:あなたのケースでは

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

を、これは問題を解決する必要があります:傍受はリクエストヘッダがContent-Type: application/jsonに設定されている場合はどうなります

$('#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); 
     } 
    }); 
}); 
+0

ありがとうございます。それが問題を解決しました。 –

関連する問題