我是一个全新的Symfony 4用户,我想创建一个具有普通用户名的rest API : password login。
https://symfony.com/doc/current/security/json_login_setup.html我认为这是处理任务的方法,但在我发送了一个带有用户名和密码的请求后,我无法获得我的内容。
下面是我的代码:
(security.yaml)
security:
providers:
our_db_provider:
entity:
class: App\Entity\ApUser
property: username
access_control:
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: ~
json_login:
check_path: login
provider: our_db_provider
logout:
path: logout
encoders:
App\Entity\ApUser:
algorithm: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER(UserController.php)
<?php
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use FOS\RestBundle\View\View;
use App\Entity\ApCustomerUser;
use App\Entity\ApUser;
use App\Azuplay\Validator\ValidateString;
use App\Azuplay\Validator\ValidateNumber;
class UserController extends FOSRestController
{
/**
* @Rest\Post("/login", name="login")
* @param Request $request
*/
public function login(Request $request)
{
}
}如果我使用正确的用户名和密码发送post请求,则服务器返回200OK,如果不正确,则返回401。所以我猜user check起作用了。但在正确登录后,服务器返回500“需要完全身份验证才能访问此资源”。例如,如果我请求一个/user。
以下是更多信息:
示例-用户:
id: 2
username: ****
email: ****
Password: ***
roles: ROLE_USERAjax-Request:
jQuery.ajax({
crossDomain : true,
url : http://myAPIDomain.de/login OR http://myAPIDomain.de/user,
data: data,
dataType: "json",
method: "POST",
contentType: "application/json",
})
.done(function (data, textStatus, jqXHR) {
console.log(data, textStatus, jqXHR);
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.error(jqXHR, textStatus, errorThrown)
});感谢您的帮助
发布于 2018-11-30 18:50:54
axios和跨域请求也有类似的问题。对我来说,设置请求参数"withCredentials: true“很有帮助。因此,在您的情况下,应该是:
jQuery.ajax({
crossDomain : true,
url : http://myAPIDomain.de/login OR http://myAPIDomain.de/user,
data: data,
dataType: "json",
method: "POST",
contentType: "application/json",
xhrFields: {
withCredentials: true
}
})
...
https://stackoverflow.com/questions/52277873
复制相似问题