【发布时间】:2017-12-25 21:48:49
【问题描述】:
我正在尝试基于此文档在 Symfony 中构建 json 身份验证机制: https://symfony.com/doc/current/security/json_login_setup.html
这是我的 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 请求
$('#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 文档中只有一个简短的描述。
【问题讨论】:
-
您是否将
username_path: security.credentials.login和password_path: security.credentials.password添加到您的security.yaml键json_login(如文档建议)? -
嘿。正如您从我的 AJAX 请求中看到的那样,我正在以最简单的格式发送 JSON:
{"username": "dunglas", "password": "MyPassword"},因此无需指定username_path和password_path引用文档:如果 JSON 文档具有不同的结构,您可以使用username_path和password_path键指定访问用户名和密码属性的路径(它们分别默认为用户名和密码)。 -
您找到解决方案了吗?也许问题是非空控制器,因为此文档明确指出控制器应该为空symfony.com/doc/current/security/json_login_setup.html 我现在遇到同样的问题,不知道如何继续。
-
我面临同样的问题。您得到了正确的响应,因为您的控制器正在返回一个有效的对象。控制器根本不应该被调用,而是被安全系统拦截。
标签: php json symfony authentication login