Придумайте: зарегистрируйте страницу как страницу приветствия/посадки, затем в профиль пользователя

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

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

Спасибо.

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

root :to => 'welcome#index'

В случае приветствия контроллером и индексом является действие.

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

def after_sign_in_path_for(user)
   "/url_you_want_to_redirect_to/"
end

Ответ 3

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

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

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

root :to => 'profile#index'

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

before_filter :authenticate_user!

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

Ответ 4

На корневой странице проверьте, был ли пользователь подписан и перенаправляется на его основе.

redirect_to sign_up_path if current_user.nil?

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

Ответ 5

Другой подход - модифицировать разработку. Измените devise_gem_path/lib/devise/failure_app.rb и замените два экземпляра в методе redirect_url:

:"new_#{scope}_session_path"

с:

:"new_#{scope}_registration_path"

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