1

Я видел много сообщений на эту тему, но я не могу сделать правильный запрос, независимо от всех моих тестов. Я надеюсь, что кто-нибудь сможет мне помочь в этом.LexikJWTAuthenticationBundle с ионным приложением

Моя текущая конфигурация: Я работаю с WAMP - апаш 2.4.9 - PHP 5.5.12 Я работаю с symfony3

я добавить все правила перезаписи в мой виртуальный хост:

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.) 
RewriteRule . - [e=HTTP_AUTHORIZATION:%1] 

На бэкенд, мой security.yml является:

firewalls: 

     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     api_doc: 
      pattern: ^/api/doc 
      anonymous: true 

     api_login: 
      pattern: ^/api/login 
      provider: fos_userbundle 
      stateless: true 
      anonymous: true 
      form_login: 
       check_path:  /api/login_check 
       require_previous_session: false 
       success_handler:   lexik_jwt_authentication.handler.authentication_success 
       failure_handler:   lexik_jwt_authentication.handler.authentication_failure 

     api: 
      pattern: ^/api 
      stateless: true 
      provider: fos_userbundle 
      lexik_jwt: 
       authorization_header: 
        enabled: true 
        prefix: Bearer 
       query_parameter: 
        enabled: true 
        name: Bearer 
       throw_exceptions:  true 
       create_entry_point:  true 

Конфигурация fosuserbundle:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: UserBundle\Entity\User 
    group: 
     group_class: UserBundle\Entity\Group 
     form: 
      type: UserBundle\Form\Type\GroupFormType 
    profile: 
     form: 
      type: UserBundle\Form\Type\ProfileFormType 

И сторона клиента, я использую ионный с угловой JS, и я стараюсь, чтобы получить токен:

var loginData = { 
       username: this.login.username, 
       password: this.login.password 
      }; 

      console.debug(loginData); 

      $http({ 
       url: 'http://app.local/app_dev.php/api/login_check', 
       method: 'POST', 
       data: loginData, 
       headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 
       ignoreAuthModule: true 
      }) 
       .success(function (data) { 
        console.log("Success -- login ok with ".data); 
        $scope.token = data; 
       }) 
       .error(function (data) { 
        console.log("ERROR -- login fail with ", data); 
        $scope.token = data; 
       }); 

, который всегда возвращает меня «плохие полномочия»

Но мой тест с завитком пришлите мне маркер

curl -X POST http://app.local/api/login_check -d _username=username -d _password=pass 

у меня есть тест на префикс _ мои данные входа в систему, изменение конфигурации

Если у кого-нибудь есть идея?


EDIT:

Может быть, я нашел мою проблему.

Этот запрос локон отлично работает:

curl -X POST http://app.local/api/login_check -d _username=username -d _password=pass 

Но это одна не работает:

curl -X POST http://app.local/app_dev.php/api/login_check -d '{"username": "user", "password": "pass"}' 

Я ищу одно решение для ее решения, но я думаю, угловой метод HTTP не может отправить два параметра


EDIT 2: Этот запрос работает отлично:

curl -X POST http://app.local/app_dev.php/api/login_check -d '{"_username": "user", "_password": "pass"}' -H "Content-Type: application/json" 

Я ищу решение для копирования этого запроса с угловой HTTP объектом


EDIT 3:

Я делаю мой угловой запрос, как это:

var loginData = { 
       _username: this.login.username, 
       _password: this.login.password 
      }; 
      $http({ 
       url: 'http://app.local/app_dev.php/api/login_check', 
       method: 'POST', 
       data: loginData, 
       headers: {'Content-Type': 'application/json'} 
      }) 
       .success(function (data) { 
        console.log("Success -- login ok with ".data); 
       }) 
       .error(function (error) { 
        console.log("ERROR -- login fail with ", error); 
       }); 

И мой javascript console напечатать ошибку:

XMLHttpRequest cannot load http://app.local/app_dev.php/api/login_check. Response for preflight has invalid HTTP status code 404 

EDIT 4:

Я ddin't нашел решение ...

кажется запрос CORS является проблемой. Я пытаюсь сбросить все заголовки в мобильном приложении, ничего не изменилось. я пытаюсь установить nelmioCorsBundle для заголовков OPTIONS одобрения крупных и контролировать свою конфигурацию, ничего не изменилось

Я установил песочницу (https://github.com/slashfan/LexikJWTAuthenticationBundleSandbox) и у меня точно такая же проблема.

Когда я пытаюсь выполнить запрос curl, я могу получить свой токен. Когда я использовать угловое/ионное приложение, у меня есть сообщение об ошибке: https://github.com/slashfan/LexikJWTAuthenticationBundleSandbox

XMLHttpRequest cannot load http://app.local/app_dev.php/api/login_check. Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, http://localhost:8100', but only one is allowed. Origin 'http://localhost:8100' is therefore not allowed access. 

Если кто-то есть новая идея ?? я не знаю, что я могу проверить сейчас: s

PS: какая версия углового работает с демо-приложением в LexikJWTAuthenticationBundleSandbox?

+0

'http: // app.local' не может работать из вашей локальной машины (как при запуске через завиток). Если вы запустили запрос на завивание с другого компьютера, это тоже не сработает. Вам нужен домен __valid__ и развертывание вашего API в процессе производства, а затем использовать этот допустимый домен в качестве конечной точки, например. 'http: // yourrealdomain.com/api/login_check' – chalasr

+0

После этого вы купили домен, сообщите мне, если вам нужны ресурсы, которые помогают его настроить. – chalasr

+0

Хорошо, я развернул свой сервер на сервере и в реальном домене, но для моих первых тестов ничего не изменилось. Я так много узнал об угловом/CORS/REST в последние дни, поэтому продолжаю свой тест по производству и повторяю их. – Quovandius

ответ

0

В первом (рабочем) запросе вы используете _username как поле со значением «имя пользователя» и _password как поле со значением «pass».

Во втором использовании username (вместо _username) в поле со значением «пользователь» и password (вместо _password) как поле со значением «проход».

Измените свой второй запрос:

curl -X POST http://app.local/app_dev.php/api/login_check -d '{"_username": "username", "_password": "pass"}' 

И он должен работать.

EDIT

Добавьте опцию -H "Content-Type: application/json, что дает:

curl -X POST http://app.local/app_dev.php/api/login_check -H "Content-Type: application/json" -d '{"_username": "username", "_password": "pass"}' 

И он должен работать!

EDIT

Это, как представляется, связаны CORS проблемой.
Попробуйте добавить следующее в своем угловом приложения, прежде чем делать запрос POST:

app.config(function ($httpProvider) { 
    $httpProvider.defaults.headers.common = {}; 
    $httpProvider.defaults.headers.post = {}; 
    $httpProvider.defaults.headers.put = {}; 
    $httpProvider.defaults.headers.patch = {}; 
}); 

Где приложение ваш угловой модуль (т.е. var app = angular.module(...)).

+0

Извините, его ошибка во многих копиях/вставке. Я пробую оба, и пакет принимает синтаксис с префиксом «_», но не с массивом. поэтому 'curl -X POST http: //app.local/app_dev.php/api/login_check -d '{" _username ":" username "," _password ":" pass "}'' не работает: s – Quovandius

+0

См. Мой отредактированный ответ – chalasr

+0

Да, этот запрос curl отлично работает =) Но когда я использую 'headers: {'Content-Type': 'application/x-www-form-urlencoded; кодировка = UTF-8; application/json '} 'на мой угловой запрос http, это не работает - что я сделал не так? – Quovandius

Смежные вопросы