Я видел много сообщений на эту тему, но я не могу сделать правильный запрос, независимо от всех моих тестов. Я надеюсь, что кто-нибудь сможет мне помочь в этом.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?
'http: // app.local' не может работать из вашей локальной машины (как при запуске через завиток). Если вы запустили запрос на завивание с другого компьютера, это тоже не сработает. Вам нужен домен __valid__ и развертывание вашего API в процессе производства, а затем использовать этот допустимый домен в качестве конечной точки, например. 'http: // yourrealdomain.com/api/login_check' – chalasr
После этого вы купили домен, сообщите мне, если вам нужны ресурсы, которые помогают его настроить. – chalasr
Хорошо, я развернул свой сервер на сервере и в реальном домене, но для моих первых тестов ничего не изменилось. Я так много узнал об угловом/CORS/REST в последние дни, поэтому продолжаю свой тест по производству и повторяю их. – Quovandius