2013-11-18 2 views
0

Я пытаюсь настроить параметры ввода при использовании устройства. В меру моих возможностей я следил за devise doc по этому вопросу. Я также много искал поиски полезных статей, таких как this. В конце концов, что происходит, когда я заполняю форму и нажимаю submit, возвращается форму «sign_up» на новой странице пользователя. Когда я проверяю db в консоли, новый пользователь не добавляется, а журналы сервера перечислены ниже с соответствующим кодом. Если вы хотите, чтобы какой-либо другой код дал мне знать, и я поставил вопрос на этот вопрос. Любая помощь приветствуется.Devise strong parameter sanitizer

журналы сервера:

Started GET "https://stackoverflow.com/users/sign_up 
utf8=%E2%9C%93&authenticity_token=lnKi02OIXc3sSkCpCzKmvQ6iaSZPI6s9aVxN9pCavH8%3D&user%5Bemail%5D=kit%40kit.com&user%5Bhandle%5D=kit&user%5Bpassword%5D=[FILTERED]&user%5Bpassword_confirmation%5D=[FILTERED]&commit=Sign+Up" for 127.0.0.1 at 2013-11-17 21:01:31 -0800 
Processing by Devise::RegistrationsController#new as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"lnKi02OIXc3sSkCpCzKmvQ6iaSZPI6s9aVxN9pCavH8=", "user"=>{"email"=>"[email protected]", "handle"=>"kit", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign Up"} 
Rendered devise/shared/_links.erb (0.3ms) 
Rendered devise/registrations/new.html.erb within layouts/application (3.7ms) 
Completed 200 OK in 10ms (Views: 9.0ms | ActiveRecord: 0.0ms) 

Мой контроллер приложения:

class ApplicationController < ActionController::Base 
# Prevent CSRF attacks by raising an exception. 
# For APIs, you may want to use :null_session instead. 
protect_from_forgery with: :exception 


protected 

def devise_parameter_sanitizer 
    if resource_class == User 
     User::ParameterSanitizer.new(User, :user, params) 
    else 
     super # Use the default one 
    end 
end 
end 

User_sanitizer:

class User::ParameterSanitizer < Devise::ParameterSanitizer 

private 
def account_sign_in 
    default_paramiters.permit(:first_name, :last_name, :handle, :email, :password, :password_confirmation, :current_password) 
end 

def account_sign_up 
    default_paramiters.permit(:first_name, :last_name, :handle, :email, :password, :password_confirmation, :current_password) 
end 

def account_account_update 
    default_paramiters.permit(:first_name, :last_name, :handle, :email, :password, :password_confirmation, :current_password) 
end 
end 

application.html.erb

<!DOCTYPE html> 
<html> 
<head> 
    <title>Meowit</title> 
    <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> 
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 


<nav class="navbar navbar-default" role="navigation"> 
    <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
    </button> 
    <a class="navbar-brand" href="<%= root_path %>">MeowIT</a> 
    </div> 

    <!-- Collect the nav links, forms, and other content for toggling --> 
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
    <ul class="nav navbar-nav"> 
     <li><a href="<%= meows_path %>">Feed</a></li> 



    </ul> 
    <ul class="nav navbar-nav navbar-right"> 
     <li> 

     <% if user_signed_in? %> 
      <li class="dropdown"> 
     <a href="" class="dropdown-toggle" data-toggle="dropdown">Account<b class="caret"></b></a> 
     <ul class="dropdown-menu"> 
      <li><%= "#{current_user.email}" %></li> 
      <li><%= link_to "Edit", edit_user_registration_path %></li> 
      <li><%= link_to("Logout", destroy_user_session_path, :method => :delete) %></li> 
     </ul> 
     </li> 
     <% else %> 
      <li><%= link_to("Login ", new_user_session_path) %></li> 
     <% end %> 

    </div><!-- /.navbar-collapse --> 
</nav> 

    <% if flash[:success] %> 
    <div class='alert alert-success'> 
     <%= flash[:success] %> 
    </div> 
    <% end %> 

    <% if flash[:info] %> 
    <div class='alert alert-info'> 
     <%= flash[:info] %> 
    </div> 
    <% end %> 

    <% if flash[:warning] %> 
    <div class='alert alert-warning'> 
     <%= flash[:warning] %> 
    </div> 
    <% end %> 

    <% if flash[:danger] %> 
    <div class='alert alert-danger'> 
     <%= flash[:danger] %> 
    </div> 
    <% end %> 


    <div class="container"> 

     <%= yield %> 
    </div> 
    </body> 
</html> 

sanitizers.rb:

require "#{Rails.application.root}/lib/user_sanitizer.rb" 

new.html.erb (внутри просмотров/изобретают/регистрации):

<div class="row"> 
    <div class="col-lg-6"> 
    <div class="well"> 
     <form class="bs-example form-horizontal"> 
     <fieldset> 
     <legend>Sign Up</legend> 
     <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
      <%= f.error_notification %> 


       <%= f.label :Email, class: "col-lg-2 control-label" %> 
       <div class="col-lg-10"> 
       <%= f.text_field :email, :required => true, :autofocus => true, class: "form-control" %> 
       </div> 

        <br> 
        <br> 
        <br> 

       <%= f.label :"Name", class: "col-lg-2 control-label" %> 
       <div class="col-lg-10"> 
       <%= f.text_field :handle, :required => false, class: "form-control" %> 
       </div> 


        <br> 
        <br> 
        <br> 

       <%= f.label :Password, class: "col-lg-2 control-label" %> 
       <div class="col-lg-10"> 
       <%= f.password_field :password, :required => true, class: "form-control" %> 
       </div> 


        <br> 
        <br> 
        <br> 

       <%= f.label :"Password Confirmation", class: "col-lg-2 control-label" %> 
       <div class="col-lg-10"> 
        <%= f.password_field :password_confirmation, :required => true, class: "form-control" %> 
       </div> 

        <br> 
        <br> 

       <div class="col-lg-10 col-lg-offset-2"> 
       <%= f.button :submit, "Sign Up", class: "btn btn-primary" %> 
       </div> 

     <% end %> 


     </fieldset> 
     </form> 
    </div> 
    </div> 
</div> 

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

редактировать (1)

Создан новый файл registrations_controller .rb в приложениях/контроллерах класс РегистрацииController < Devise :: RegistrationsController

 private 

     def configure_devise_params 
      devise_parameter_sanitizer.for(:sign_up) do |u| 
      u.permit(:email, :password, :password_confirmation) 
      end 
     end 
    end 

Изменено devies_for route в routes.rb, чтобы указать на новый контроллер.

devise_for :users, :controllers => {:registrations => "registrations"} 

Последние, я закомментирована ссылка на devise_parameter_sanitizer в контроллере приложения и удалить

require "#{Rails.application.root}/lib/user_sanitizer.rb" 

в sanitizers.rb

ответ

0

Вы можете добавить это изобрести регистрации контроллера

private 

def configure_devise_params 
    devise_parameter_sanitizer.for(:sign_up) do |u| 
    u.permit(:email, :password, :password_confirmation) 
    end 
end 
+0

Я пробовал это, и я получаю тот же результат. – Kit

+0

Я пытался сделать практически то же самое в user_sanitizer.rb, требуя его через sanitizers.rb. С тем же результатом и без 'ПРЕДУПРЕЖДЕНИЕ: Невозможно назначить защищенные атрибуты массива. Я думаю, что мне не хватает чего-то другого. См. Редактирование (1) в вопросе, см., Как я реализовал выше. – Kit

1

Не уверен, что вам все еще нужна помощь, но я был в состоянии чтобы мои дезинфицирующие средства работали, отбросив префиксные счета.

Внутри пользователя user_sanitizer.rb удаляются «учетные записи» из ваших методов.

def sign_in 
    ... 
end 

def sign_up 
    ... 
end 

Выполнение этого таким образом сработало для меня.

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