У меня есть настройка, в которой у меня есть API 4 рельсов, имеющий gem devise_token_auth и размещаемый как отдельное приложение, поэтому у меня также есть стойки, настроенные на обрабатывать запросы перекрестного происхождения. Используя angular2-token на моем лицевом конце Angular 2 applicaiton, я смог успешно зарегистрироваться и войти в систему, а также выйти из пользователей через мой API. Проблема, с которой я столкнулся, возникает только тогда, когда пользователь вступил в систему, и после обновления браузера я получаю эту ошибку в консоли API rails, а также в браузере, отмеченном как в firefox, так и в chrome.rails 4 API дает 401 неутешительный ответ после успешного входа в систему с использованием пакета углового2-токена
Started GET "/api/v1/auth/validate_token" for 127.0.0.1 at 2017-02-06 17:42:49 +0500
Processing by DeviseTokenAuth::TokenValidationsController#validate_token as JSON
следует
SELECT "users".* FROM "users" WHERE "users"."uid" = $1 LIMIT 1 [["uid", "[email protected]"]]
Completed 401 Unauthorized in 76ms (Views: 0.2ms | ActiveRecord: 0.3ms)
Моего исходным допущения при конфигурировании этого пакета в моем приложении Angular2 было то, что он будет неявно включать заголовки аутентификации в каждом запросе. Однако после многократного прохождения документации gem я также добавил заголовки самостоятельно, когда я инициализирую службу токена в файле app.component.ts.
this._tokenService.init({
apiPath: API_PATH,
globalOptions: {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
"access_token_name": localStorage.getItem('accessToken'),
"client_name": localStorage.getItem('client'),
"uid_name": localStorage.getItem('uid')
}
}
});
Даже после того, что ответ не изменился на запрос, и я не смог получить эти заголовки на стороне сервера, а также.
Однако после нескольких часов осмотра мне пришла в голову идея, которая должна была проверять заголовки m на сервере, и когда я использовал запрос ruby.header.inspect в своем конечном приложении на сервере, я получаю следующий вывод с необходимой информацией для проверки маркеров, но это, кажется, что название ключей этих значений заголовков разных форм, что devise_token_auth ожидает проверки маркеров (я прошел через источник devise_auth_token жемчужины here.
"HTTP_ACCESS_TOKEN_NAME"=>"xxxxxxxxxxxxxxxxxx", "HTTP_EXPIRY"=>"xxxxxxxxxxxxxxxxxx", "HTTP_UID"=>"[email protected]", "HTTP_CLIENT_NAME"=>"xxxxxxxxxxxxxxxxxx", "HTTP_TOKEN_TYPE"=>"Bearer"
что я считаю, пользователь не устанавливается с помощью devise_token_auth gem на основе передаваемых заголовков.
После многократного просмотра документации Angular2-token, а также devise_token_auth gem. Я смущен, вручную или нет, добавлять заголовки для проверки подлинности вручную, поскольку я считаю, что они уже переданы, но с разными ключами. Я просто хотел бы знать, если это так, я переживаю его почти полный день, и я не могу понять, как указать причину ответа 401.
Большое спасибо.
EDITED:
Кроме того я также получаю ноль при доступе к CURRENT_USER или любой помощник DEViSE после успешного знака на стороне сервера.
Здесь приведена конфигурация стойки для моего устройства api rails. приложение.Р.Б.
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '/cors',
:headers => :any,
:methods => [:post],
:credentials => true,
:max_age => 0
resource '*',
:headers => :any,
:expose => ['access-token', 'expiry', 'token-type', 'uid', 'client'],
:methods => [:get, :post, :options, :delete, :put]
end
end
Заголовки, которые я получаю от проверки следующие:
- HTTP_ACCESS_TOKEN
- HTTP_CLIENT
- HTTP_EXPIRY
- HTTP_TOKEN_TYPE
- HTTP_UID
Это отправленные заголовки, даже если я не упоминаю заголовки при настройке пакета углового2-токена.
Я смущен, почему он позволяет мне войти в систему, в первую очередь, а затем выдаст ошибку с 401 кодом и реакции
{"success":false,"errors":["Invalid login credentials"]}
При попытке вручную проверить проверки лексемы, используя следующий код
this._tokenService.validateToken().subscribe(
res => console.log(res),
error => console.log(error)
);
Спасибо большое за ответ! Я попробую это правильно! – Hassan
На самом деле я пробовал эти изменения раньше, но не повезло. Даже если я не передаю заголовки вообще в глобальных параметрах, после проверки заголовков на сервере я получаю эти значения, но с разными ключами, как я упомянул в своем вопросе. Имеет ли он что-либо с конфигурациями стойки на моем сервере или что-то еще? Кроме того, я также получаю ноль при доступе к current_user или любому помощнику при создании после успешного входа на сервер. – Hassan
Вы разоблачили свои заголовки в конфигурации CORS? Обратитесь к этому https: // github.com/lynndylanhurley/devise_token_auth # cors – ErvalhouS