it-swarm.com.de

So entfernen Sie die Registrierung von Devise

Ich versuche, den Pfad "user/sign_up" von Devise zu entfernen bzw. zu deaktivieren. Ich mache das, weil ich nicht will, dass zufällige Personen Zugriff auf die Anwendung erhalten 

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

Dies bricht jedoch <%= link_to "Profile", edit_user_registration_path, class: "btn btn-info btn-flat" %>

die ich behalten möchte, damit die Benutzer ihr Profil aktualisieren können .. __ Ich weiß, es liegt am devise_for :users, :skip => :registration

Gibt es eine Lösung für dieses Problem?

Laufen

Entwickeln (4.2.0, 4.1.1, 4.1.0)

Schienen 4.2.5

Ruby 2.3.0p0 (2015-12-25 Version 53290) [x86_64-linux]

19
M.T Davis

Lösung zum Entfernen des sign_up-Pfads von Devise

Geben Sie am Anfang von routes.rb Folgendes ein

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

... Nach der obigen Anweisung fügen Sie Folgendes in routes.rb hinzu.

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

Dadurch wird der user/sign_up-Pfad für Devise entfernt/deaktiviert, ohne edit_user_registration_path zu unterbrechen. 

Starten Sie Ihren Rails-Server neu und es sollte funktionieren.

9
M.T Davis

Am einfachsten entfernen Sie einfach das ": registerable" -Erzeugungsmodul aus der Standardliste, die in Ihrem Modell definiert ist (der Klassenname, der für die Benutzer der Anwendung verwendet wird, normalerweise User ).

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

  ...
end

So wirst du es so haben:

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

  ...
end
36
jcgil

Da as nur ein Alias ​​für devise_scope ist, können Sie all dies in einem einzigen Block zusammenfassen.

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
4

Ich hatte gerade das gleiche Problem. Meine Lösung ist eine Mischung dieser Antworten:

Erster Kommentar/Entfernen Sie den :registerable von user.rb

class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end Zweitens entfernen Sie die Registrierungspfade von devise in routes.rb.

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

Jetzt werden alle Registrierungslinks aus ihrer Sicht übersprungen und Sie haben keine Registrierungspfade mehr auf Ihrer Route.

2
David Roth

Der folgende Code scheint mir zu helfen:

Rails.application.routes.draw do

  devise_scope :users do #notice "users" here, not "user"
    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 => [:registrations]
  as :user do
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
    put 'users' => 'devise/registrations#update', :as => 'user_registration'
  end
...
0
Amir Rajak