После успешного входа в систему Следующие (последующие) запросы на угловой стороне не авторизованы сервером rails

0

После успеха Signin по электронной почте auth,

Следующие запросы по угловому (js-стороне) являются несанкционированными.

Я не могу видеть token в ответе на успех, проверяя объект ответа в режиме callback,

Но я уверен, что сервер вернул токен, проверив консоль хром.

И я предполагаю, что следующие запросы не отправили жетоны.

Что такое багги? благодаря

успешная авторизация электронной почты по адресу http://localhost: 3000/api/v1/auth/sign_in

$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 исключение

Аутентификация по адресу http://localhost: 3000/api/v1/banks

У меня 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

    '''

routes.rb

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'
      }
  ...      

апи /v1/banks.rb

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!
  ...

application.rb

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;
        }
    });
});
Теги:
devise

1 ответ

0

Если он возвращает 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."]}
  • 0
    Я исправил файл cookie, который не был сохранен, изменив `storage: 'cookies',` на storage: 'localStorage', однако я не знаю причину LOL
  • 0
    @newBike проверяйте его таким образом, после входа в console.log($scope.user) , вы увидите подписанный объект current_user!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню