Ich habe Devise Authentifizierung über GET abzumelden, konnte es aber nicht diese Angularjs Code machen sich abzumelden:Kann nicht Devise machen, um sich abzumelden von Angularjs
$scope.logout = ->
$http.get('/users/sign_out').success ->
#If it does not redirect from 'editor' to 'login' then you haven't actually logged out
$location.path('editor')
Devise des Logout-Verhalten scheint zufällig sein - manchmal meldet es sich ab, manchmal nicht. Und wenn ich /users/sign_out
in die Adressleiste des Browsers eingeben, meldet es sich immer ab.
Ok, schaltete ich die Protokoll der Authentifizierung Devise aus Anforderung POST Caching Probleme loszuwerden und verwenden folgenden Angularjs Code:
$scope.logout = ->
$http.post('/users/sign_out').success ->
$location.path('editor')
Das erste Mal ist es in Ordnung abgemeldet, wie immer, aber dann Ich konnte es nicht schaffen mich auszuloggen.
Ich beschloss, meine eigene Methode, um zu sehen, was passiert, zu machen:
match '/logout' => 'api#logout', :via => :post
class ApiController < ApplicationController
before_filter :authenticate_user!
def logout
sign_out
if current_user
puts 'Has not signed out!'
else
puts 'Has signed out!'
end
head :ok
end
end
und festgestellt, dass nach sign_out
die current_user
immer null ist, dann aber wie durch ein Wunder die Angular Anwendung verwaltet andere Methoden der ApiController zuzugreifen, und current_user ist nicht Null!
Ich verstehe das nicht. Ok, nehmen wir an, dass eine andere HTTP-Anfrage unmittelbar nach der (oder zur gleichen Zeit) Abmeldeanforderung, dem Übergeben des Authentifizierungscookies und der Neuanmeldung von Devices folgen kann, aber nicht die in Cookie übergebene Sitzungs-ID ablaufen sollte sofort nach dem Aufruf der sign_out Methode ?!
Haben Sie Ihre sign_out [Route a: Route in devise.rb?] (Http://stackoverflow.com/questions/6557311/no-route-matches-users-sign-out-devise-rails-3)) – shicholas
@shicholas: natürlich – Paul
Wie wäre es mit Rails Cookies oder ng Cookies? – shicholas