Разработать пользовательские маршруты и страницы входа
-
26-09-2019 - |
Вопрос
Я пытаюсь получить пользовательские маршруты, работающие в моих рельсов (Ruby 1.9.2 с рельсами 3).
Это мой файл config / marross.rb
match '/dashboard' => 'home#dashboard', :as => 'user_root'
devise_for :user do
get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in
get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out
get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations
end
Но отправка формы ON / Login или / Register идет к пользователям / joys_in и пользователям / insig_up. Как мне помешать этому. Или еще лучше убедитесь, что по умолчанию все запросы для пользователей / sign_in и т. Д. Перейти к соответствующим маршрутам, а не маршруты по умолчанию, сгенерированные разработкой.
Кроме того, как я могу сделать вход в систему частичной, чтобы включить его в любой контроллер? Так что я могу иметь страницу входа на главную страницу (домой # индекс), а не на пользователях / Sign_in?
Я использую Devise 1.1.3 с рельсами 3 на Ruby 1.9.2, на Mac OSX Snow Leopard.
Спасибо!
Решение
С разработкой 1.1.3 следующее должно работать
devise_for :user, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }
Маршруты, которые она создает, не будет добавлено «/ пользователь / ...» из-за :path
Параметр быть пустой строкой. То :pathnames
Хеш позаботится о том, чтобы назвать маршруты, как вам нравится. Devise будет использовать эти маршруты внутри, поэтому отправка / логин будет работать, как вы хотите, и не принимаете вас / пользователь / log_in
Чтобы добавить форму входа на вашу первую страницу, есть информация в разработке Wiki:http://github.com/plataformatec/devise/wiki/how-to:-display-a-custom-sign_in-form-anyway-in-your-app.
Или сделать что-то вроде этого:
<%= form_tag new_user_session_path do %>
<%= text_field_tag 'user[email]' %>
<%= password_field_tag 'user[password]' %>
<%= submit_tag 'Login' %>
Другие советы
Для меня сработало следующее:
devise_for :users do
get "/login" => "devise/sessions#new"
get "/register" => "devise/registrations#new"
end
Вам просто нужно не ставить свой специальный маршрут в Devise_for Block
match '/dashboard' => 'home#dashboard', :as => 'user_root'
get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in
get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out
get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations
devise_for :user
Сейчас / вход работает. / пользователи / sign_in тоже.
Config:
devise_scope :user do
get 'profile/edit' => 'devise/registrations#edit', :as => :edit_user_registration
get 'profile/cancel' => 'devise/registrations#cancel', :as => :cancel_user_registration
end
devise_for :users,
:path => '',
:path_names => { :sign_in => 'login',
:sign_out => 'logout',
:sign_up => '',
:registration => 'register',
:edit => 'edit',
:cancel => 'cancel',
:confirmation => 'verification' }
Маршруты:
edit_user_registration GET /profile/edit(.:format) devise/registrations#edit
cancel_user_registration GET /profile/cancel(.:format) devise/registrations#cancel
new_user_session GET /login(.:format) devise/sessions#new
user_session POST /login(.:format) devise/sessions#create
destroy_user_session DELETE /logout(.:format) devise/sessions#destroy
user_password POST /password(.:format) devise/passwords#create
new_user_password GET /password/new(.:format) devise/passwords#new
edit_user_password GET /password/edit(.:format) devise/passwords#edit
PATCH /password(.:format) devise/passwords#update
PUT /password(.:format) devise/passwords#update
GET /register/cancel(.:format) registrations#cancel
user_registration POST /register(.:format) registrations#create
new_user_registration GET /register(.:format) registrations#new
GET /register/edit(.:format) registrations#edit
PATCH /register(.:format) registrations#update
PUT /register(.:format) registrations#update
DELETE /register(.:format) registrations#destroy
Я создал свой собственный контроллер Auth Controller и Routed Devise Sessions для моего контроллера
devise_for :users,
:controllers => {
:sessions => 'auth' },
:path => '/',
:path_names => {
:sign_in => 'login',
:sign_out => 'logout' }
Этот код будет добавлять / войти и / / выходить из системы URL.
Подробнее об этом вы можете найти в исходном коде http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb.
Используйте это в верхней части ваших маршрутов.
map.connect "users/:action", :controller => 'users', :action => /[a-z]+/i
Используйте это, где находится ваш файл индекса. Если оно на модели ваших пользователей, используйте вышеупомянутое или изменение соответственно