Разработать: зарегистрировать страницу как страницу приветствия / посадки, а затем в профиле пользователя - PullRequest
13 голосов
/ 29 апреля 2011

Используя devise, как мне сделать мою регистрацию моей целевой страницей / страницей приветствия, а затем, после регистрации, перейти на сайт в профиль / область входа?

Я пытаюсь выяснить, каксделать так, чтобы Facebook был двумя сторонами сайта;Снаружи (регистрация, контакт, контакт и т. д.) и Внутри (профиль, выход и т. д.) для пользователей только после регистрации или входа.

Спасибо.

PS IЯ новичок в Ruby on Rails и создаю приложения, но я сделал систему аутентификации с помощью Rails 3 Tutorial, я понимаю большинство вещей, чтобы начать использовать Devise, я просто не знаю, с чего начать в этой ситуации.

Я собирался использовать 2 макета приложения, 1 перед регистрацией, который является layouts / welcome.html.erb с PagesController (о, условия и т. Д.), И другой для зарегистрированных пользователей, которые будут макетами / приложением.html.erb с ApplicationController (профиль, новости, добавления и т. д.), это лучшие шаги?

Ответы [ 5 ]

9 голосов
/ 29 апреля 2011

в ваших маршрутах.rb:

root :to => 'welcome#index'

Где приветствуется контроллер, а индекс - действие.

В вашем контроллере приложения:

def after_sign_in_path_for(user)
   "/url_you_want_to_redirect_to/"
end
6 голосов
/ 17 июля 2011

Это мой новый и обновленный способ с использованием Rails 3.1.0 и Devise 1.5.0:

rout.rb

root :to => "pages#redirect_to_sign_up"

devise_for :users do
  get "welcome" => "devise/registrations#new", :as => :new_user_registration
  get "account_settings" => "devise/registrations#edit"
  get "sign_in" => "devise/sessions#new"
  get "sign_out" => "devise/sessions#destroy"
  get "new_password", :to => "devise/passwords#new"
end

match 'home',      :to => "user_pages#home"

namespace :user do
  root :to => "user_pages#home"
end

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  def after_sign_in_path_for(resource)
    stored_location_for(:user) || root_path
  end

  private

  def after_sign_out_path_for(resource)
    stored_location_for(:user) || root_path
  end
end

pages_controller.rb

class PagesController < ApplicationController
  def redirect_to_sign_up
    if signed_in?.blank?
      redirect_to new_user_registration_path
    else
      redirect_to home_path
    end
  end
end

user_pages_controller.rb

class UserPagesController < ApplicationController
  before_filter :authenticate_user!

  def home
  end

  def profile
  end
end
3 голосов
/ 29 апреля 2011

Я считаю, что проще всего получить root-права на нужную аутентифицированную целевую страницу и просто использовать before_filter, чтобы заставить пользователя сначала войти в систему или зарегистрироваться через before_filter.

В этом случае, скажем, ваша «область входа» является контроллером / действием, называемым профилем / индексом.

В вашем route.rb установите корень в профиль / индекс.

root :to => 'profile#index'

Затем в вашем profile_controller установите следующий before_filter.

before_filter :authenticate_user!

Это автоматически подтолкнет вошедшего в систему пользователя (или того, кто вошел ранее и установит cookie-файл Remember Me) прямо на страницу профиля. Любые неаутентифицированные пользователи автоматически окажутся при входе в систему. Вам также понадобится ссылка (или отдельная вкладка) на этой странице для регистрации.

2 голосов
/ 02 сентября 2011

Другой подход заключается в модификации устройства. Отредактируйте devise_gem_path / lib / devise / fault_app.rb и замените два вхождения в методе redirect_url:

:"new_#{scope}_session_path"

с:

:"new_#{scope}_registration_path"

Менее разрушительное решение сделало бы ответ redirect_url более настраиваемым.

2 голосов
/ 29 апреля 2011

На корневой странице проверьте, выполнил ли пользователь вход в систему, и выполните перенаправление на основе этого.

redirect_to sign_up_path if current_user.nil?

В качестве альтернативы, вы можете визуализировать различные шаблоны вместо перенаправления, но я думаю, что чищеиметь отображение 1: 1 между URL-адресами и страницами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...