2015-02-15 3 views
1

Я использую Devise/OmniAuth (с входом в Facebook), и я пытаюсь ограничить маршруты Devise до именно этим, потому что я хочу разрешить вход только через Facebook.Как ограничить маршруты Devise до новых маршрутов/destroy и OmniAuth?

    Prefix Verb  URI Pattern       Controller#Action 
     new_user_session GET  /users/sign_in(.:format)    devise/sessions#new 
    destroy_user_session DELETE /users/sign_out(.:format)    devise/sessions#destroy 
user_omniauth_authorize GET|POST /users/auth/:provider(.:format)  callbacks#passthru {:provider=>/facebook/} 
    user_omniauth_callback GET|POST /users/auth/:action/callback(.:format) callbacks#:action 

, но вместо этого, я могу показаться, чтобы не сокращать набор маршрутов вниз к чему-либо меньше, чем это (без также сносит new_user_session и destroy_user_session):

    Prefix Verb  URI Pattern       Controller#Action 
     new_user_session GET  /users/sign_in(.:format)    devise/sessions#new 
      user_session POST  /users/sign_in(.:format)    devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)    devise/sessions#destroy 
user_omniauth_authorize GET|POST /users/auth/:provider(.:format)  callbacks#passthru {:provider=>/facebook/} 
    user_omniauth_callback GET|POST /users/auth/:action/callback(.:format) callbacks#:action 
      user_password POST  /users/password(.:format)    devise/passwords#create 
     new_user_password GET  /users/password/new(.:format)   devise/passwords#new 
     edit_user_password GET  /users/password/edit(.:format)   devise/passwords#edit 
         PATCH /users/password(.:format)    devise/passwords#update 
         PUT  /users/password(.:format)    devise/passwords#update 
cancel_user_registration GET  /users/cancel(.:format)    registrations#cancel 
     user_registration POST  /users(.:format)      registrations#create 
    new_user_registration GET  /users/sign_up(.:format)    registrations#new 
    edit_user_registration GET  /users/edit(.:format)     registrations#edit 
         PATCH /users(.:format)      registrations#update 
         PUT  /users(.:format)      registrations#update 
         DELETE /users(.:format)      registrations#destroy 

Несколько других вопросов (например, , this one) Я обнаружил, показывают, что :skip в routes.rb может помочь, например:

devise_for :users, :skip => [:sessions, :registrations]

Проблема с этим подходом заключается в том, что он сдувает new_user_session и destroy_user_session. В принципе, я хочу, чтобы пользователь мог перейти на страницу входа (new_user_session_path) и выйти (через destroy_user_session_path).

Я думаю, что здесь отсутствует фундаментальная концепция, но я не уверен, что это такое. По сути, я хотел бы, чтобы отключить эти маршруты:

  • devise/sessions#create (зачем мне это нужно, если Войти всегда через Facebook)
  • devise/passwords#create
  • devise/passwords#new
  • devise/passwords#edit
  • devise/passwords#update
  • registrations#cancel
  • registrations#create
  • registrations#new
  • registrations#edit
  • registrations#update
  • registrations#destroy

Как я мог это сделать? (Или делает то, что я пытаюсь сделать, даже имеет смысл?)

+0

http://stackoverflow.com/questions/8418514/rails-devise-how-can-i-disable-some-default-routes не уверен, что это помогает .. – Mingsheng

+1

https://github.com/plataformatec/ devise/blob/66db52ce31b5d8629f5813a1d7f03a8bc17e5d52/test/rails_app/config/routes.rb # L40 Проверьте это! Использование только: [: регистрация] – duykhoa

ответ

3

Вы можете определить отдельные маршруты путем удаления devise_for вызова и с помощью devise_scope так:

# routes.rb 

devise_scope :user do 
    get 'sign_in', to: 'devise/sessions#new', as: :new_user_session 
    delete 'sign_out', to: 'devise/sessions#destroy', as: :destroy_user_session 
    # etc... 
end 

Тогда вы будете иметь точный контроль над маршрутами разработки.

Надеюсь, что это поможет.

Смежные вопросы