Devise: рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд▓реЙрдЧрд┐рди рдФрд░ рдкрдВрдЬреАрдХрд░рдг

рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдФрд░ "рдирд┐рдпрдорд┐рдд" рдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рд╡реЗ рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлреЙрд░реНрдо рдбрд╛рд▓рддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдХреА рдбреЗрд╡рд┐рд╕ рд╕реЗ рдкреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП), рдФрд░ рдпрд╣рд╛рдБ ( рд▓реЙрдЧрд┐рди рдФрд░ рдкрдВрдЬреАрдХрд░рдг ) рд╡реЗ рдбреЗрд╡рд┐рд╕ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рд▓рдЧрд╛рддрд╛рд░ рдХреЗрд╡рд▓ рдЬреЕрд╕рди рд▓реМрдЯреЗрдВ рдФрд░ "рдореЙрдбрд▓" рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рд╢рд░реНрддреЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рд░реВрдкред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ 2 рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЧрдВрджреЗ рд╣реИрдХ рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг


  1. рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░реАрдХреНрд╖рдг рдХреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЗрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрдВрдбрд▓ рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ : rails new devise_modal -B -T
  2. рд░рддреНрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд░рддреНрди рдЬреЛрдбрд╝реЗрдВ:

    рдФрд░ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: bundle install
  3. рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдЬрдирд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
    рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ rails g bootstrap:install static , rails g bootstrap:install static
    rails g devise:install; rails g devise User; rake db:migrate rails g devise:install; rails g devise User; rake db:migrate - рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ

  4. рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдБ рдЬреЛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛:
    rails g controller welcome index --no-helper --no-assets
    Config / path.rb рдореЗрдВ рд╣рдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдмрд╛рдБрдзрддреЗ рд╣реИрдВ:
    root 'welcome#index'

рдЗрд╕ рдЪрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ devise рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд▓рд┐рдВрдХ рдкрд░ рд▓реЙрдЧрд┐рди / рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рд╣реИ: users/sign_in рдФрд░ users/sign_up ред

рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ


рд░реВрдкреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╣реАрдВ рд╣реИ - рд╣рдо рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рд╡рд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рджреВрд░рд╕реНрде рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЬрд╕реНрд╕рди рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреБрдХреНрдд рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд▓рдкреЗрдЯрдХрд░ рдореЛрдбрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдРрд╕рд╛ рдЖрдВрд╢рд┐рдХ рдорд┐рд▓рд╛:
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рд╕рд╛рдЭрд╛ / _sign_in.html.erb
 <div class="modal hide fade in" id="sign_in"> <div class="modal-header"> <button class="close" data-dismiss="modal">x</button> <h2>Sign in</h2> </div> <div class="modal-body"> <%= form_for(User.new, url: session_path(:user), html:{id: 'sign_in_user', :'data-type' => 'json'}, remote: true) do |f| %> <div> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true %> </div> <div> <%= f.label :password %><br /> <%= f.password_field :password, autocomplete: "off" %> </div> <% if Devise.mappings[:user].rememberable? -%> <div> <%= f.check_box :remember_me %> <%= f.label :remember_me %> </div> <% end -%> <div> <%= f.submit "Sign in" %> </div> <% end %> </div> <div class="modal-footer"> </div> </div> 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рд╕рд╛рдЭрд╛ / _sign_up.html.erb
 <div class="modal hide fade in" id="sign_up"> <div class="modal-header"> <button class="close" data-dismiss="modal">x</button> <h2>Sign up</h2> </div> <div class="modal-body"> <%= form_for(User.new, url: registration_path(:user), html: {id: 'sign_up_user', :'data-type' => 'json'}, remote: true) do |f| %> <div> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true %> </div> <div> <%= f.label :password %><br /> <%= f.password_field :password, autocomplete: "off" %> </div> <div> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "off" %> </div> <div><%= f.submit "Sign up" %></div> <% end %> </div> <div class="modal-footer"> </div> </div> 

рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рд▓рд┐рдВрдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЬреЛрдбрд╝реЗрдВ:
 <%= link_to "Sign in", "#sign_in", "data-toggle" => "modal", :class => 'btn btn-small' %> <%= link_to "Sign up", "#sign_up", "data-toggle" => "modal", :class => 'btn btn-small' %> <%= render 'shared/sign_in' %> <%= render 'shared/sign_up' %> 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рдереЛрдбрд╝рд╛ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗ:
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рд▓реЗрдЖрдЙрдЯ / application.html.erb
 <% if current_user %> <%= "Hello, #{current_user.email}" %> <%= link_to "Sign out", destroy_user_session_path, :method => :delete %> <% else %> <%= link_to "Sign in", "#sign_in", "data-toggle" => "modal", :class => 'btn btn-small' %> <%= link_to "Sign up", "#sign_up", "data-toggle" => "modal", :class => 'btn btn-small' %> <%= render 'shared/sign_in' %> <%= render 'shared/sign_up' %> <% end %> 

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ application_helper рдореЗрдВ рдХрдИ рддрд░реАрдХреЗ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗ:
app / рд╕рд╣рд╛рдпрдХреЛрдВ / application_helper.rb
 def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end 

рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд┐рдВрдЯрд░рдХреБ рдФрд░ рдбрд╛рд░реНрдерд╕рд┐рдо рдиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдо рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ; рд╕рдВрд╕рд╛рдзрди рдХреЗ рдмрдЬрд╛рдп рдлрд╝реЙрд░реНрдо рдореЗрдВ рд╕реАрдзреЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - User.new , рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп User.new - :user ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░реЛрдВ / рд╕рд╛рдЭрд╛ / _sign_in.html.erb рдореЗрдВ, Devise.mappings[:user] рдХреЛ devise_mapping рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ Devise.mappings[:user] ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 <% if devise_mapping.rememberable? -%> 
рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ ( рдРрдк / рдореЙрдбрд▓ / user.rb ) рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ :rememberable ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрдк / рд╡рд┐рдЪрд╛рд░ / рд╕рд╛рдЭрд╛ / _sign_up.html.erb рдореЗрдВ рдПрдХ devise_error_messess рд╕рд╣рд╛рдпрдХ рднреА рдерд╛ ! , рдЬреЛ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдкрд╛рда json рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдмрд╕ <%= devise_error_messages! %> рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ <%= devise_error_messages! %> <%= devise_error_messages! %> рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВред
рдЕрдм рдРрд╕реЗ рдореЛрдбрд▓ рдлреЙрд░реНрдо рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдкреЗрдЬ рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ devise html рдкреЗрдЬ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИред

рдбреЗрд╡рд┐рд╕ рд╕реЗ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ


рдбреЗрд╡рд┐рд╕ рд░рддреНрди рдореЗрдВ, FailureApp рдЗрдирдкреБрдЯ-рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ ред рдЬрдм SessionController рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд▓реЙрдЧрд┐рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЬрд╡рд╛рдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд╣рд╛рдВ http_auth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЬрд╛рдБрдЪ рдХреА рдЧрдИ: рдЖрдкрдХреЛ 401 рд╕реНрдерд┐рддрд┐ рднреЗрдЬрдиреЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╕реАрдпрдд рд╣реИ :
config / initializers / devise.rb
 config.http_authenticatable_on_xhr = true 
рдлрд┐рд░ 401 рд░рд┐рдЯрд░реНрдиред
AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, RegContController, рдПрдХ html рдкреГрд╖реНрда рднреЗрдЬрддрд╛ рд╣реИ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ - рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХрд┐рди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
rails g controller Registrations --no-helper --no-assets --no-views
config / рдорд╛рд░реНрдЧреЛрдВ .rb
 devise_for :users, controllers: {registrations: 'registrations'} 

рдРрдк / рдХрдВрдЯреНрд░реЛрд▓рд░ / рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди_рдХрдВрдЯреНрд░реЛрд▓рд░ .rb
 class RegistrationsController < Devise::RegistrationsController respond_to :html, :json end 

рдЕрдм, рдПрдХ рдЕрд╕рдлрд▓ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛JSON ['рддреНрд░реБрдЯрд┐рдпреЛрдВ'] рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд╕рд╛рде 422 рд╕реНрдерд┐рддрд┐ рджреА рдЬрд╛рдПрдЧреА, рдФрд░ рдПрдХ рд╕рдлрд▓ рдПрдХ рдХреЗ рд╕рд╛рде - 201. рдЗрд╕реА рддрд░рд╣ рд╕реЗрд╢рдВрд╕рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рд╕рдлрд▓ рд▓реЙрдЧрд┐рди рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╕реНрдерд┐рддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, html рдкреГрд╖реНрда рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ "рд╕рд┐рдЦрд╛" рджреЗрдВрдЧреЗ json рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рджреЗрдВ:
rails g controller Sessions --no-helper --no-assets --no-views
config / рдорд╛рд░реНрдЧреЛрдВ .rb
 devise_for :users, controllers: {sessions: 'sessions', registrations: 'registrations'} 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдирд┐рдпрдВрддреНрд░рдХ / session_controller.rb
 class SessionsController < Devise::SessionsController respond_to :html, :json end 

рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВрдЧреЗ:
app / рдЖрд╕реНрддрд┐рдпреЛрдВ / javascripts / welcome.js.cfish
 $ -> $("form#sign_in_user, form#sign_up_user").bind("ajax:success", (event, xhr, settings) -> $(this).parents('.modal').modal('hide') ).bind("ajax:error", (event, xhr, settings, exceptions) -> error_messages = if xhr.responseJSON['error'] "<div class='alert alert-danger pull-left'>" + xhr.responseJSON['error'] + "</div>" else if xhr.responseJSON['errors'] $.map(xhr.responseJSON["errors"], (v, k) -> "<div class='alert alert-danger pull-left'>" + k + " " + v + "</div>" ).join "" else "<div class='alert alert-danger pull-left'>Unknown error</div>" $(this).parents('.modal').children('.modal-footer').html(error_messages) ) 

рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░, рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд▓рд░реНрдЯ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдкрд╛рдж рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рдлрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рд╣рдо рдмрд╕ рдореЛрдбрд▓ рдлреЙрд░реНрдо рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ (рдЖрдк рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ (рд╡реЗ рднреА рдЙрддреНрддрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ))ред
рдЕрдм рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЛрдбрд▓ рдлреЙрд░реНрдо - json , рдФрд░ рд╕реНрдЯреИрдВрдбрд░реНрдб ( рдпреВрдЬрд░реНрд╕ / рд╕рд╛рдЗрди_рдЗрди , рдпреВрдЬрд░реНрд╕ / рд╕рд╛рдЗрди_рдЕрдк ) - html рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд╡рд╣ рдерд╛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛, рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛:
 respond_to :html, :json 

рдЯрд┐рдкреНрдкрдгреА

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЗрд▓ 4 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди 3.2 рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рдиреНрдпреВрдирддрдо рд╣реЛрдЧрд╛: рдЬрдм рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ bundle install рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ public/index.html рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдореБрдЦреНрдп рдкрде рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд┐рдЦреЗрдЧрд╛:
config / рдорд╛рд░реНрдЧреЛрдВ .rb
 root to: 'welcome#index' 

Source: https://habr.com/ru/post/In216837/


All Articles