Rails Devise перенаправляет аутентифицированного пользователя на определенный путь

Проблема

С помощью Devise user следует перенаправить на edit_user_registration_path действия registrations#edit контроллера Devise, когда он уже зарегистрирован.

Описание

В routes.rb корень установлен как root :to => 'main#welcome'. Пользователь всегда перенаправляется на эту страницу, даже если он уже авторизован.

Большое спасибо Фабрицио


person Fabrizio Bertoglio    schedule 16.02.2017    source источник
comment
если вы еще этого не видели, это может вам помочь, github.com/plataformatec /devise/wiki/OmniAuth:-Обзор   -  person Rockwell Rice    schedule 16.02.2017
comment
@RockwellRice Спасибо, да, я читал. Я ищу ошибки в Интернете. Это потерянный сеанс, поэтому я тестирую следующие решения stackoverflow.com/questions/5816294/   -  person Fabrizio Bertoglio    schedule 16.02.2017
comment
@RockwellRice Я думаю принять твой ответ. Для этого конкретного вопроса я создам еще один вопрос. Что вы думаете?   -  person Fabrizio Bertoglio    schedule 16.02.2017


Ответы (3)


Возможно, вы ищете способ перенаправить пользователя в какое-то место после того, как он войдет в систему. Это должно сделать это. Поместите это в app/controllers/application_controller.rb и поместите на путь, по которому вы хотите привести пользователя.

  def after_sign_in_path_for(resource)
    edit_user_registration_path # or any other path needed
  end
person Alok Swain    schedule 16.02.2017
comment
Большое спасибо. На самом деле мне нужно перенаправить пользователя независимо от входа. Я уже отредактировал этот after_sign_in_path_for(resource), и это сработало, но сейчас я пытаюсь перенаправить его, когда он уже вошел в систему. - person Fabrizio Bertoglio; 16.02.2017

Devise предоставляет метод user_signed_in?.

Это будет welcome метод в вас main_controller.rb

def welcome 

    if user_signed_in?
        redirect_to edit_user_registration_path
    else
        // put other page in here
    end        
end
person Rockwell Rice    schedule 16.02.2017
comment
Я думаю, что ваш ответ является правильным. Мой user_signed_in? всегда ложно, даже после входа в систему. Я проверил и прочитал значение как с facebook omniauth, так и с обычным sign_in/sign_up . Спасибо - person Fabrizio Bertoglio; 16.02.2017
comment
вместо этого вы могли бы попробовать, если current_user, на самом деле это не исправление, но я мог бы, по крайней мере, заставить его двигаться в правильном направлении и помочь в отладке. Если это все еще ложно даже после входа в систему, значит, что-то не так с реализацией, и вы должны посмотреть в базу данных, чтобы увидеть, какие записи устанавливаются. - person Rockwell Rice; 16.02.2017
comment
Спасибо, мне нужно исправить себя. Метод user_signed_in? не работает, когда я вхожу в систему с помощью omniauth facebook, в то время как он работает с обычными пользователями. Я пробовал с current_user. Когда я вхожу в систему с помощью facebook omniauth, он перенаправляет меня в мой профиль. Если я захожу, то localhost:3000 с отправляет меня на main#welcome и запускает if current_user с current_user = nil - person Fabrizio Bertoglio; 16.02.2017
comment
Я бы обновил исходный пост, чтобы упомянуть omniauth. - person Rockwell Rice; 16.02.2017

Это может ввести в заблуждение, но пользователь входит в систему с помощью устройства после метод регистрации, вызываемый внутри Devise ::RegistrationsController#create

class Devise::RegistrationsController < DeviseController

  # POST /resource
  def create
    build_resource(sign_up_params)
    # omitted code
    resource.save
    sign_up(resource_name, resource)

какой sign_in() пользователь

def sign_up(resource_name, resource)
  sign_in(resource_name, resource)
end

поэтому метод, который нужно улучшить,

def after_sign_in_path_for(resource)
  edit_user_registration_path
end
person Fabrizio Bertoglio    schedule 29.10.2018