После успеха Signin по электронной почте auth,
Следующие запросы по угловому (js-стороне) являются несанкционированными.
Я не могу видеть token
в ответе на успех, проверяя объект ответа в режиме callback,
Но я уверен, что сервер вернул токен, проверив консоль хром.
И я предполагаю, что следующие запросы не отправили жетоны.
Что такое багги? благодаря
$auth.submitLogin({
email: '[email protected]',
password: '123'
})
.then(function(resp) {
// handle success
// I got User information but without token
// {id: 1, provider: "email", uid: "[email protected]", name: null, nickname: null…}
})
Я делаю запрос GET в других контроллерах и получаю Unauthorized исключение
У меня 401 (Unauthorized)
app.controller('BanksIndexCtrl', function($scope, $resource, $q, bankService) {
// this will raise Unauthorized exception
$q.all([$scope.BankService.all().$promise]).then(function(ret){
$scope.banks = ret[0]
});
});
Исключение на консоли
Started GET "/api/v1/banks" for 127.0.0.1 at 2016-04-22 22:51:47 +0800
Processing by Api::V1::BanksController#index as JSON
Filter chain halted as :authenticate_api_v1_user! rendered or redirected
Completed 401 Unauthorized in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms)
Заголовок запроса
'''
GET /api/v1/banks HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
If-Modified-Since: Mon, 26 Jul 1997 05:00:00 GMT
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
Referer: http://localhost:3000/ngAdmin/admin.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: _session_id=2971e86420fb63b7a0d1de5c2fe97d88; remember_user_token=W1sxXSwiJDJhJDEwJE4xcWhrNVMvME51Um5GeGV5anc3UWUiLCIxNDYxMzM0NDMzLjk4ODQzODEiXQ%3D%3D--bcb30c131693a6ebdd638c835f7acdc4202abb66; _ga=GA1.1.381527585.1455597511; _sample_session=UitEN3l5WHNKdFpnV0dVWXYyUlRnYTlmdW9pUE9Oa0wydFFMWUw4c3E1Um5zaytsMmdZcy8wb01PbU9WOVA3dm9mRjUzLzRKdmQ1cmw0WDhsY0lPc3RGVTA3YUdSYm5sVXN6Rmpnd25EaU4rWTE3ZU9FakRYWHVyalJ3OTg4eGQ0RnhYWDRqMXRwazh6bmlRdk82eDM1ZzhYQk1lelRFSmVtZXc0ZTdsSGUzczJpSlhsenk0ZC9pK0k5d0wvRXpUNTNhenBsVzUwaVBONlFIOWQ5THR4MS9VS3BiQVF5NEhyVW1JNnF4N2prQXRkVGhpb2psZEZTdHNoelN2L1VzWTVBTVQ2VzlKcnE5N0I5OWVGRUlmbHFyb3NTTUZ6cHZwc2UwbW4wMWgranR4YTJHZ3V6Nm1CTVNVUTllditFMktNbDBGODNucUcydHYzT3Q1eEZyaTlnPT0tLTg4bXVLa1lFZ1NER1J6RFhGWFNyaXc9PQ%3D%3D--97b510524e0a6b970ef6ad26d87d83fadb80f51c
'''
Rails.application.routes.draw do
devise_for :users , :controllers => {:registrations => "registrations"}
namespace :api do
namespace :v1, defaults: {format: 'json'} do
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
sessions: 'token_sessions'
}
...
class Api::V1::BanksController < ApplicationController
skip_before_action :protect_from_forgery
protect_from_forgery with: :null_session, only: Proc.new { |c| c.request.format.json? }
before_filter :authenticate_api_v1_user!
...
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options, :head],
:expose => ['access-token', 'expiry', 'token-type', 'uid', 'client'],
:max_age => 0
end
end
app.config(function($authProvider) {
$authProvider.configure({
apiUrl: '/',
tokenValidationPath: 'api/v1/auth/validate_token',
signOutUrl: 'api/v1/auth/sign_out',
emailRegistrationPath: 'api/v1/auth',
accountUpdatePath: 'api/v1/auth',
accountDeletePath: 'api/v1/auth',
confirmationSuccessUrl: window.location.href,
passwordResetPath: 'api/v1/auth/password',
passwordUpdatePath: 'api/v1/auth/password',
passwordResetSuccessUrl: window.location.href,
emailSignInPath: 'api/v1/auth/sign_in',
storage: 'cookies',
forceValidateToken: false,
validateOnPageLoad: true,
proxyIf: function() {
return false;
},
proxyUrl: '/proxy',
omniauthWindowType: 'sameWindow',
authProviderPaths: {
sample: 'api/v1/auth/sample',
github: 'api/v1/auth/github',
facebook: 'api/v1/auth/facebook',
google: 'api/v1/auth/google'
},
tokenFormat: {
"access-token": "{{ token }}",
"token-type": "Bearer",
"client": "{{ clientId }}",
"expiry": "{{ expiry }}",
"uid": "{{ uid }}"
},
cookieOps: {
path: "/",
expires: 9999,
expirationUnit: 'days',
secure: false,
domain: 'domain.com'
},
createPopup: function(url) {
return window.open(url, '_blank', 'closebuttoncaption=Cancel');
},
parseExpiry: function(headers) {
// convert from UTC ruby (seconds) to UTC js (milliseconds)
return (parseInt(headers['expiry']) * 1000) || null;
},
handleLoginResponse: function(response) {
return response.data;
},
handleAccountUpdateResponse: function(response) {
return response.data;
},
handleTokenValidationResponse: function(response) {
return response.data;
}
});
});
Если он возвращает 403, это означает, что он не был успешно зарегистрирован. Введенная длина пароля поставляется с 8 дайджестами по умолчанию.
Кроме того, вы можете проверить это путем керлинга, как пример ниже:
# curl it in terminal
curl -i -H "Accept: application/json" -H "Content-type:application/json" -X POST -d '{"email": "[email protected]", "password":"rrrrrrr"}' http://lvh.me:3000/api/v1/auth/sign_in
### Example Output if success ###
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
access-token: UFVM33JQMp4EjV9M-hVa9g
token-type: Bearer
client: 6cuQFDv4lzbsqR8hYxp2-A
expiry: 1462591377
uid: [email protected]
Content-Type: application/json; charset=utf-8
ETag: W/"720c5d261ca642ff4aaf2af6c593de4a"
Cache-Control: max-age=0, private, must-revalidate
X-Meta-Request-Version: 0.4.0
X-Request-Id: b435a9b7-4006-49c2-a482-e044d4c7bd7f
X-Runtime: 0.672509
Connection: close
Server: thin
SUCCESS -> {"data":{"id":2,"provider":"email","email":"[email protected]"}}
### If not valid password or email ###
HTTP/1.1 401 Unauthorized
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache
X-Meta-Request-Version: 0.4.0
X-Request-Id: f6fca921-5a10-4fce-92e3-3a40dab5b284
X-Runtime: 0.114391
Connection: close
Server: thin
Not SUCCESS -> {"errors":["Invalid login credentials. Please try again."]}
storage: 'localStorage',
однако я не знаю причину LOLconsole.log($scope.user)
, вы увидите подписанный объект current_user!