2016-09-29 12 views
7

Tôi đang cố gắng xóa/tắt đường dẫn 'user/sign_up' từ Devise. Tôi đang làm điều này vì tôi không muốn những người ngẫu nhiên có quyền truy cập vào ứng dụng. có nó phần nào làm việc bằng cách thêm vào sau trong routes.rbCách xóa/tắt đăng ký từ Devise

Rails.application.routes.draw do 
    devise_scope :user do 
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in 
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration 
    end 

... 

devise_for :users, :skip => :registration 

end 

Tuy nhiên, điều này phá vỡ <%= link_to "Profile", edit_user_registration_path, class: "btn btn-info btn-flat" %>

mà tôi muốn giữ lại để người dùng có thể cập nhật hồ sơ của họ. tôi biết đó là vì sự devise_for :users, :skip => :registration

Có giải pháp nào không Cho vấn đề này?

Chạy

lập mưu (4.2.0, 4.1.1, 4.1.0)

Rails 4.2.5

ruby ​​2.3.0p0 (2015/12/25 sửa đổi 53.290) [x86_64 -linux]

+0

Bạn có thể sử dụng 'skip:: registerable' và chỉ thêm các tuyến đường bạn muốn. –

+0

@AndreyDeineko, nếu tôi thêm 'skip:: registerable', nó sẽ kích hoạt' users/sign_up'. Làm cách nào để ngăn điều đó xảy ra? –

+0

wiki phát triển [ở đây] (https://github.com/plataformatec/devise/wiki/How-Tos) rất hữu ích cho tất cả mọi thứ (tôi đã sử dụng nó để thiết lập trang web của mình chỉ cho phép một người dùng) – MageeWorld

Trả lời

8

giải pháp để loại bỏ con đường sign_up từ lập mưu

Nhập sau vào phần đầu của routes.rb

Rails.application.routes.draw do 
    devise_scope :user do 
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in 
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration 
    end 

... Sau tuyên bố trên, thêm dòng sau đây trong routes.rb

devise_for :users, :skip => [:registrations] 
    as :user do 
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration' 
    put 'users' => 'devise/registrations#update', :as => 'user_registration' 
    end 

này sẽ loại bỏ/vô hiệu hóa các con đường user/sign_up cho lập mưu mà không vi phạm edit_user_registration_path

Khởi động lại máy chủ ray của bạn và nó sẽ hoạt động.

2

Kể từ as chỉ là một bí danh cho devise_scope, bạn có thể đặt tất cả những gì chỉ trong một khối.

devise_for :users, skip: [:registrations] 
as :user do 
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in 
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration 
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration' 
    put 'users' => 'devise/registrations#update', :as => 'user_registration' 
end 
14

Cách đơn giản nhất chỉ là loại bỏ ": registerable" đưa ra mô-đun từ danh sách mặc định được xác định vào Model của bạn (tên lớp sử dụng cho người dùng của ứng dụng, thường tài).

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    ... 
end 

Vì vậy, bạn sẽ có nó như thế này:

class User < ActiveRecord::Base 
    devise :database_authenticatable, 
     :recoverable, :rememberable, :trackable, :validatable 

    ... 
end 
+0

Nó ngay lập tức loại bỏ các tuyến đường, nó sẽ được tốt đẹp nó nó cũng sẽ bỏ qua thư mục đăng ký khi tạo các quan điểm. Nhưng bạn chỉ cần xóa cái đó. Và không ai có thể đăng ký tại trang web. Điều đó làm việc tuyệt vời với sự xâm lược để kiểm soát quản trị viên. – Dieglock

0

Tôi chỉ có cùng một vấn đề.Giải pháp của tôi là một sự pha trộn của những câu trả lời:

Comment Đầu tiên/Tháo :registerable trên user.rb

class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end Second loại bỏ các đường dẫn đăng ký từ devise trong routes.rb

devise_for :users, :skip => [:registrations] , controllers: { sessions: 'users/sessions' }

Bây giờ đưa ra sẽ bỏ qua mọi các liên kết đăng ký từ chế độ xem của họ và bạn cũng không còn có đường dẫn đăng ký trên tuyến đường của mình nữa.

Các vấn đề liên quan