首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4- Rest API跨域JSON_Login

Symfony 4- Rest API跨域JSON_Login
EN

Stack Overflow用户
提问于 2018-09-11 22:08:49
回答 1查看 657关注 0票数 0

我是一个全新的Symfony 4用户,我想创建一个具有普通用户名的rest API : password login。

https://symfony.com/doc/current/security/json_login_setup.html我认为这是处理任务的方法,但在我发送了一个带有用户名和密码的请求后,我无法获得我的内容。

下面是我的代码:

(security.yaml)

代码语言:javascript
复制
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)

代码语言:javascript
复制
<?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。

以下是更多信息:

示例-用户:

代码语言:javascript
复制
id: 2
username: ****
email: ****
Password: ***
roles: ROLE_USER

Ajax-Request:

代码语言:javascript
复制
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)
});

感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2018-11-30 18:50:54

axios和跨域请求也有类似的问题。对我来说,设置请求参数"withCredentials: true“很有帮助。因此,在您的情况下,应该是:

代码语言:javascript
复制
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
            }
})
...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52277873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档