Придумайте: зарегистрируйте страницу как страницу приветствия/посадки, затем в профиль пользователя
Используя 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 более настраиваемым.