Rails Devise регистрирует путь, перенаправляющий на «Вам необходимо войти или зарегистрироваться, прежде чем продолжить». - PullRequest
0 голосов
/ 21 апреля 2020

Я использовал Devise для аутентификации моего пользователя, затем добавил миграцию для имени, фамилии и имени пользователя. После того, как я изменил свой простой код формы, мой путь sign_up перенаправил меня на сообщение «Вам необходимо войти или зарегистрироваться перед тем, как продолжить». без имени ошибки.

Ссылка на мой сайт также странная, поскольку она имеет sign_up.user http://localhost: 3000 / users / sign_up.user

Это мой код, который отправляет меня по неверному пути в devise / shared / links

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
  <%= link_to "Sign up", new_user_registration_path(resource_name) %><br />
<% end %>

Это моя простая форма в devise / registrations / new (не реализовано first_name, last_name и username пока.

<h2>Sign up</h2>

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :email,
                required: true,
                autofocus: true,
                input_html: { autocomplete: "email" }%>
    <%= f.input :password,
                required: true,
                hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
                input_html: { autocomplete: "new-password" } %>
    <%= f.input :password_confirmation,
                required: true,
                input_html: { autocomplete: "new-password" } %>
  </div>

  <div class="form-actions">
    <%= f.button :submit, "Sign up" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>

И мои маршруты ...

Rails.application.routes.draw do
  root to: 'pages#home'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  resources :items
  get 'menu', to: 'items#menu'
  get 'items_stock', to: 'items#stock'

  devise_for :users, :controllers => { registrations: :registrations }
  get 'users/:slug', to: 'users#show', as: :user_show
  get 'my_profile', to: 'users#my_profile'

end

Я также пытался создать другой контроллер для перезаписи, не работал ...

class RegistrationsController < ApplicationController

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    @user.save
    if @user.save
      redirect_to user_path(@user)
      authorize @user
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:first_name, :last_name, :username, :email, :password, :password_confirmation)
  end

end

Мои маршруты

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
new_user_password GET    /users/password/new(.:format)                                                            devise/passwords#new
edit_user_password GET    /users/password/edit(.:format)                                                           devise/passwords#edit
user_password PATCH  /users/password(.:format)                                                                devise/passwords#update
PUT    /users/password(.:format)                                                                devise/passwords#update
POST   /users/password(.:format)                                                                devise/passwords#create
cancel_user_registration GET    /users/cancel(.:format)                                                                  registrations#cancel
new_user_registration GET    /users/sign_up(.:format)                                                                 registrations#new
edit_user_registration GET    /users/edit(.:format)                                                                    registrations#edit
user_registration PATCH  /users(.:format)                                                                         registrations#update
PUT    /users(.:format)                                                                         registrations#update
DELETE /users(.:format)                                                                         registrations#destroy
POST   /users(.:format)                                                                         registrations#create
user_show GET    /users/:slug(.:format)                                                                   users#show
my_profile GET    /my_profile(.:format)                                                                    users#my_profile

Я действительно не знаю, какой файл может повлиять на это.

1 Ответ

0 голосов
/ 22 апреля 2020

Это немного сложно, потому что здесь есть несколько пользовательских файлов за пределами Devise, и я не вижу всей реализации. Я думаю, что тот факт, что это произошло после того, как вы добавили эти новые поля, является ключевым. Если вы обновите свой контроллер приложения этим кодом, я уверен, что он будет работать, я думаю, вы не разрешаете новые параметры правильно.

application_controller.rb

...
before_action :configure_permitted_parameters, if: :devise_controller?

...

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, : username])
  devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, : username])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...