开发者

Activeadmin doesn't log out when I click "logout"

开发者 https://www.devze.com 2023-04-12 04:24 出处:网络
I am following the instructions from the railscast about installing activeadmin. Upon installation, I got two errors -

I am following the instructions from the railscast about installing activeadmin. Upon installation, I got two errors -

1) invalid number of args for sign_in - so I renamed my sign_in method to sign_in_user and that fixed this issue.

then

2) invalid number of args for signed_in? - so I renamed my signed_in? method to is_signed_in? and that fixed this issue.

Now everything seems to work except when I click the log out button in activeadmin, it says "signed out successfully" but the logout button is still in the top corner and it didn't log me out.

I added these two things to my active_admin.rb file per suggestions from people with similar problems:

config.logout_link_path = :destroy_admin_user_session_path

and

config.logout_link_method = :delete

but still no luck. Here is my rake routes:

     admin_dashboard        /admin(.:format)                               {:action=>"index", :controller=>"admin/dashboard"}
            admin_comments GET    /admin/comments(.:format)                      {:action=>"index", :controller=>"admin/comments"}
            admin_comments POST   /admin/comments(.:format)                      {:action=>"create", :controller=>"admin/comments"}
         new_admin_comment GET    /admin/comments/new(.:format)                  {:action=>"new", :controller=>"admin/comments"}
        edit_admin_comment GET    /admin/comments/:id/edit(.:format)             {:action=>"edit", :controller=>"admin/comments"}
             admin_comment GET    /admin/comments/:id(.:format)                  {:action=>"show", :controller=>"admin/comments"}
             admin_comment PUT    /admin/comments/:id(.:format)                  {:action=>"update", :controller=>"admin/comments"}
             admin_comment DELETE /admin/comments/:id(.:format)                  {:action=>"destroy", :controller=>"admin/comments"}
    new_admin_user_session GET    /admin/login(.:format)            开发者_Python百科             {:action=>"new", :controller=>"active_admin/devise/sessions"}
        admin_user_session POST   /admin/login(.:format)                         {:action=>"create", :controller=>"active_admin/devise/sessions"}
destroy_admin_user_session DELETE /admin/logout(.:format)                        {:action=>"destroy", :controller=>"active_admin/devise/sessions"}
       admin_user_password POST   /admin/password(.:format)                      {:action=>"create", :controller=>"active_admin/devise/passwords"}
   new_admin_user_password GET    /admin/password/new(.:format)                  {:action=>"new", :controller=>"active_admin/devise/passwords"}
  edit_admin_user_password GET    /admin/password/edit(.:format)                 {:action=>"edit", :controller=>"active_admin/devise/passwords"}
       admin_user_password PUT    /admin/password(.:format)                      {:action=>"update", :controller=>"active_admin/devise/passwords"}
                     users GET    /users(.:format)                               {:action=>"index", :controller=>"users"}
                     users POST   /users(.:format)                               {:action=>"create", :controller=>"users"}
                  new_user GET    /users/new(.:format)                           {:action=>"new", :controller=>"users"}
                 edit_user GET    /users/:id/edit(.:format)                      {:action=>"edit", :controller=>"users"}
                      user GET    /users/:id(.:format)                           {:action=>"show", :controller=>"users"}
                      user PUT    /users/:id(.:format)                           {:action=>"update", :controller=>"users"}
                      user DELETE /users/:id(.:format)                           {:action=>"destroy", :controller=>"users"}
              attend_event POST   /events/:id/attend(.:format)                   {:action=>"attend", :controller=>"events"}
     remove_attendee_event POST   /events/:id/remove_attendee/:user_id(.:format) {:controller=>"events", :action=>"remove_attendee"}
                edit_event POST   /events/:id/edit(.:format)                     {:controller=>"events", :action=>"edit"}
                    events GET    /events(.:format)                              {:action=>"index", :controller=>"events"}
                    events POST   /events(.:format)                              {:action=>"create", :controller=>"events"}
                 new_event GET    /events/new(.:format)                          {:action=>"new", :controller=>"events"}
                edit_event GET    /events/:id/edit(.:format)                     {:action=>"edit", :controller=>"events"}
                     event GET    /events/:id(.:format)                          {:action=>"show", :controller=>"events"}
                     event PUT    /events/:id(.:format)                          {:action=>"update", :controller=>"events"}
                     event DELETE /events/:id(.:format)                          {:action=>"destroy", :controller=>"events"}
                  sessions POST   /sessions(.:format)                            {:action=>"create", :controller=>"sessions"}
               new_session GET    /sessions/new(.:format)                        {:action=>"new", :controller=>"sessions"}
                   session DELETE /sessions/:id(.:format)                        {:action=>"destroy", :controller=>"sessions"}
                    signup        /signup(.:format)                              {:controller=>"users", :action=>"new"}
              create_event        /create_event(.:format)                        {:controller=>"events", :action=>"new"}
                 my_events        /my_events(.:format)                           {:controller=>"events", :action=>"my_events"}
                    signin        /signin(.:format)                              {:controller=>"sessions", :action=>"new"}
                   signout        /signout(.:format)                             {:controller=>"sessions", :action=>"destroy"}
                   contact        /contact(.:format)                             {:controller=>"pages", :action=>"contact"}
                     about        /about(.:format)                               {:controller=>"pages", :action=>"about"}
                      help        /help(.:format)                                {:controller=>"pages", :action=>"help"}
                      root        /(.:format)                                    {:controller=>"pages", :action=>"home"}

what am I missing? thanks!


For Devise users:

In /config/initializers/active_admin.rb

ActiveAdmin.setup do |config|
  config.logout_link_path = :destroy_user_session_path
  config.logout_link_method = :delete

RESTART SERVER before testing the change.


I had the same problem that you are facing. I can't see in your code where you had the sign_in and signed_in? methods, but I suspect you may have them in a SessionsHelper class or similar, and that that helper is included in the ApplicationController like so?

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper
...

It seems ActiveAdmin implements these methods too, and overriding them in the SessionsHelper wrecks it. You are on the right path and almost there! There is one more method you probably have that needs renaming, then you are done:

sign_out

Rename that one too, then you should be able to both log in and out, just as before. Good luck!


  1. have you "restart" your rails application once you changed its config file?

  2. what's your routes.rb looks like? I am wondering if you have 2 devise_for statement, e.g.

    devise_for :admin_users, ActiveAdmin::Devise.config 
    #... other routes
    devise_for :users
    

    if so, please remove 1 of them.

  3. make sure if the logout link looks like below:

    <a href="/users/sign_out" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Logout</a>
    


I solved it by changing the name of my sign_out method in my SessionsHelper.

 def sign_out_user
  current_user.update_attribute(:remember_token,
                              Adult.digest(Adult.new_remember_token))
  cookies.delete(:remember_token)
  self.current_user = nil
end

I then had to change my SessionsController destroy method to match

def destroy
  sign_out_user   ###CHANGE HERE
  redirect_to root_url
end

Also, If you are using the method anywhere in your views. You will need to change it so that it matches the new method name too.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号