সাইন আপ করতে আমি কীভাবে ডিভাইস রুটটি সরিয়ে ফেলব?


147

আমি একটি রেল 3 অ্যাপে ডিভাইস ব্যবহার করছি, তবে এই ক্ষেত্রে অবশ্যই একজন বিদ্যমান ব্যবহারকারী অবশ্যই তৈরি করবেন, যিনি তার / তার কী অনুমতি নেবেন তা নির্ধারণ করে।

এই কারণে, আমি চাই:

  • করতে ব্যবহারকারীদের সাইন আপ করতে জন্য রুট অপসারণ
  • ব্যবহারকারীদের সাইন আপ করার পরেও তাদের প্রোফাইল সম্পাদনা করার (ইমেল ঠিকানা এবং পাসওয়ার্ড পরিবর্তন করতে) অনুমতি দেওয়ার জন্য

কিভাবে আমি এটি করতে পারব?

বর্তমানে, আমি নিম্নলিখিতটি আগে রেখে কার্যকরভাবে এই রুটটি সরিয়ে দিচ্ছি devise_for :users:

match 'users/sign_up' => redirect('/404.html')

এটি কাজ করে, তবে আমি কল্পনা করি এর থেকে আরও ভাল উপায় আছে, তাই না?

হালনাগাদ

বেনোইট গ্যারেট যেমন বলেছিলেন, আমার ক্ষেত্রে সবচেয়ে ভাল সমাধান হ'ল রেজিস্ট্রেশন রুটগুলি মাস্কে তৈরি করা ছেড়ে দেওয়া এবং কেবলমাত্র আমি আসলে যা চাই তা তৈরি করা।

এটি করার জন্য, আমি প্রথমে দৌড়েছি rake routes, তারপরে আমি যা চেয়েছিলাম তা পুনরায় তৈরি করতে আউটপুটটি ব্যবহার করেছি। শেষ ফলাফলটি ছিল:

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

মনে রাখবেন যে:

  • আমি এখনও :registerableআমার Userমডেল আছে
  • devise/registrations ইমেল এবং পাসওয়ার্ড আপডেট করে পরিচালনা করে
  • অন্যান্য ব্যবহারকারীর বৈশিষ্ট্যগুলি আপডেট করা - অনুমতি ইত্যাদি a একটি আলাদা নিয়ামক দ্বারা পরিচালনা করা হয়

আসল উত্তর:

ডিফল্ট ডিভাইস পাথগুলির জন্য রুটটি সরান; অর্থাৎ,

devise_for :users, path_names: {
  sign_up: ''
}

4
আমি আসলে আপনার মূল সমাধানটি অনেক সহজ এবং পরিষ্কার বলে মনে করি। এটির সাথে সুরক্ষা অনুযায়ী কোনও বাস্তব সমস্যা আছে কি?
counterbeing

কোনও কারণে আপনার আপডেট হওয়া সমাধানটি আইডি দরকার বলে একটি ত্রুটি ছুঁড়তে থাকল। চুল টানার এক ঘন্টা এবং অনেকগুলি সার্ভার পুনরায় চালু হওয়ার পরে এটি কোনওভাবে নিজেকে স্থির করে। আমার কোনও ধারণা নেই ... তবে অন্য কেউ যদি তা অনুভব করে, চেষ্টা চালিয়ে যান!
এরিক ট্রুটম্যান

@ কাউন্টারবিইং - আমি জানি যে সমস্যা নেই, আমি কেবল অব্যবহৃত রুট থাকা বা অর্ডারের উপর নির্ভর করা পছন্দ করি না।
নাথান লং

1
"প্রকৃত উত্তর" রুটটিকে সম্পূর্ণরূপে হত্যা করে না যদি এটি নিয়ন্ত্রকের মধ্যে থেকে নির্দেশিত হয়। ডিফল্ট আচরণটি সাইন আপের পথে আপনাকে এখনও পথ সরিয়ে দেবে যদি আপনি এইভাবে জিইটি রুটে আঘাত করেন https://example.com/users/। আমার উত্তর নীচে দেখুন।
lacostenycoder

1
সুরক্ষা ত্রুটি! "প্রকৃত উত্তর" যা কেবলমাত্র সাইন আপ ফর্মটি থেকে মুক্তি পেয়ে যায়, এটি প্রকৃতপক্ষে ব্যবহারকারীকে তৈরি করা পোস্টের রুট থেকে মুক্তি পায় না।
এরিক টেরি

উত্তর:


54

আমি এটি করার চেষ্টাও করেছি, তবে গুগল গুগল গ্রুপের একটি থ্রেড আমাকে সত্যিকারের পরিষ্কার সমাধান অনুসন্ধানে বিরত রেখেছে।

আমি হোসে ভ্যালিম (ডিভাইস রক্ষণাবেক্ষণকারী) কে উদ্ধৃত করব:

একটি সরাসরি-এগিয়ে বিকল্প নেই। আপনি হয় কোনও প্যাচ সরবরাহ করতে পারেন বা ব্যবহার করতে পারেন: এড়িয়ে যান =>: পুনরায় উল্লেখযোগ্য এবং কেবলমাত্র যে রুটগুলি আপনি চান তা যুক্ত করতে পারেন।

মূল প্রশ্নটি ছিল:

রেলগুলি থেকে কোনও নির্দিষ্ট রুট (মুছতে রুট) অপসারণ করার কোনও ভাল উপায় আছে কি?


4
বেশ সঠিক। প্রকৃতপক্ষে, আমি একটি প্যাচ প্রস্তাব করেছি এবং তিনি বিনয়ের সাথে প্রত্যাখ্যান করেছিলেন: "আজ আপনি পুরো নিয়ামককে এড়িয়ে যেতে পারেন op এটি ব্যবহারের দিক থেকে অনুকূল নয়, তবে পুরো নিয়ামকের জন্য নিজেই রুটগুলি সেট আপ করা বেশ সোজা সোজা is আমি বিশ্বাস করি যে পথগুলি বাদ না দিয়ে I নাম অনুসারে কেবল রুটগুলির জেনারেশন কোডটিকে আরও জটিল করে তুলছে (এটি ইতিমধ্যে এর চেয়ে বেশি) কারণ আমরা রেল সহায়ক (যেমন রিসোর্স, সংস্থান এবং বন্ধুদের) ব্যবহার করতে পারব না "। github.com/plataformatec/devise/issues/…
নাথান লং

2
আমি জানিনা যখন এই উত্তরটি মূলত এই উত্তরটি লেখা হয়েছিল তখনই এটি ছিল কিনা তবে জোসের উদ্ধৃতিতে কোডটি ভুল ছিল। ডিভাইস 3.4.1 এ :skip => :registrationsনা :skip => :registerable
জিএমএ

89

আপনি আপনার মডেল এটি করতে পারেন

# typical devise setup in User.rb
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

এটিকে পরিবর্তন করুন:

devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable

লক্ষ্য করুন যে প্রতীকটি :registerableসরানো হয়েছে

এটাই, অন্য কিছু দরকার নেই। নিবন্ধকরণ পৃষ্ঠার সমস্ত রুট এবং লিঙ্কগুলি যাদুকরীভাবেও সরানো হয়েছে।


21
দুর্ভাগ্যক্রমে, এটি edit_user_registrationআমার প্রয়োজনীয় রুটও সরিয়ে দেয় । আমি যেমন বলেছিলাম, "তাদের প্রোফাইলগুলি সম্পাদনা করতে সক্ষম হওয়া উচিত" "
নাথান লং

1
আহ্, ঠিক আছে, আমি সাধারণত রেল_এডমিন রত্ন ইনস্টল করে এটিকে ঘিরে রাখি , যা ব্যবহারকারীদের পুনরায় স্থাবরlocalhost:3000/admin বস্তু সরিয়ে এমনকি তাদের অ্যাকাউন্ট সম্পাদনা করতে পারে এমন জায়গায় যেতে দেয় । যদি এটি কোনও কার্যকর সমাধান না হয় তবে ক্যানক্যানটি একবার দেখুন যা আপনাকে কোনও সংস্থান অ্যাক্সেস করতে পারে এবং কারা পারবেন না তা নির্ধারণ করতে দেয়। আমি 'অ্যাডমিন' বা 'মডারেটর' এর মতো ভূমিকা যুক্ত করতে এবং সাইন_আপ পৃষ্ঠাগুলি থেকে অন্য সকলকে লক করার ঝোঁক রাখি।
স্টেফেন্মুরডোচ

28
ব্যবহারকারীদের নিজস্ব প্রোফাইল সম্পাদনা করার উপায় সরবরাহ করার জন্য একটি প্রশাসক বিভাগ (যা স্বেচ্ছাসেবী রেকর্ড সম্পাদনার অনুমতি দেওয়ার জন্য নির্মিত) ব্যবহার করা আমি দীর্ঘ সময় শুনেছি এমনটি সবচেয়ে খারাপ ধারণা। দয়া করে কেউ এটি করবেন না
জেরেমি

sign_inউত্পাদন নিষ্ক্রিয় কিভাবে ?
ডাব্লুএম

30

আমার অনুরূপ ইস্যুটি তৈরি এবং নতুনের জন্য ডিভাইস_ভেন্যযোগ্য পাথগুলি সরানোর চেষ্টা করেছিল :

আগে:

 devise_for :users

রেক রুট

accept_user_invitation GET    /users/invitation/accept(.:format)           devise/invitations#edit
       user_invitation POST   /users/invitation(.:format)                  devise/invitations#create
   new_user_invitation GET    /users/invitation/new(.:format)              devise/invitations#new
                       PUT    /users/invitation(.:format)                  devise/invitations#update

পরে

devise_for :users , :skip => 'invitation'
devise_scope :user do
  get "/users/invitation/accept", :to => "devise/invitations#edit",   :as => 'accept_user_invitation'
  put "/users/invitation",        :to => "devise/invitations#update", :as => nil
end

রেক রুট

accept_user_invitation GET    /users/invitation/accept(.:format)                 devise/invitations#edit
                       PUT    /users/invitation(.:format)                        devise/invitations#update

দ্রষ্টব্য 1 নকশাকার সুযোগ https://github.com/plataformatec/devise#configuring-routes

নোট 2 আমি এটি ডিভাইস_ইনভেবলিতে প্রয়োগ করছি তবে এটি কোনও ধরণের * সক্ষম বৈশিষ্ট্যটির সাথে কাজ করবে

গুরুত্বপূর্ণ নোট: দেখতে যে devise_scope হয় ব্যবহারকারী না ব্যবহারকারীগণ ? এটা সঠিক, এই জন্য নজর রাখুন! এটি আপনাকে এই সমস্যাটি দেয় এমন প্রচুর ব্যথা হতে পারে:

Started GET "/users/invitation/accept?invitation_token=xxxxxxx" for 127.0.0.1 
Processing by Devise::InvitationsController#edit as HTML
  Parameters: {"invitation_token"=>"6Fy5CgFHtjWfjsCyr3hG"}
 [Devise] Could not find devise mapping for path "/users/invitation/accept?  invitation_token=6Fy5CgFHtjWfjsCyr3hG".
This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
     match "/some/route" => "some_devise_controller"
  end

 2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

    @request.env["devise.mapping"] = Devise.mappings[:user]

আমি ঠিক যা খুঁজছিলাম তা ধন্যবাদ। এই সমাধানটি ব্যবহার করে এমন অন্যদের জন্য, আমাকে পুটের রুটের সংজ্ঞাতে / / আইডি যুক্ত করতে হয়েছিল।
জন

21

আমি এটির অনুরূপ অন্য একটি পোস্ট পেয়েছি এবং @ ক্রিশনকোলা একটি উত্তর ভাগ করতে চেয়েছি। পোস্টে তারা উত্পাদনের সময় কেবলমাত্র ব্যবহারকারী সাইনআপকে ব্লক করার চেষ্টা করছিল।

আপনি নিবন্ধগুলি নিয়ন্ত্রণকারীও সংশোধন করতে পারেন। আপনি এর মতো কিছু ব্যবহার করতে পারেন:

ইন "অ্যাপ্লিকেশন / কন্ট্রোলার / registrations_controller.rb"

class RegistrationsController < Devise::RegistrationsController
  def new
    flash[:info] = 'Registrations are not open.'
    redirect_to root_path
  end

  def create
    flash[:info] = 'Registrations are not open.'
    redirect_to root_path
  end
end

এটি ডিভাইসের নিয়ামককে ওভাররাইড করবে এবং এর পরিবর্তে উপরের পদ্ধতিগুলি ব্যবহার করবে। তারা ফ্ল্যাশ বার্তাগুলি যুক্ত করেছে যদি কেউ সাইন আপ পৃষ্ঠায় এটি তৈরি করে। আপনার পছন্দমতো কোনও পথে পুনঃনির্দেশ পরিবর্তন করতে সক্ষম হওয়া উচিত।

এছাড়াও "কনফিগ / routes.rb" আপনি এই যুক্ত করতে পারেন:

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

এটিকে ছেড়ে যাওয়া আপনাকে আপনার প্রোফাইল সম্পাদনা করার মানক নকশা ব্যবহার করার অনুমতি দেবে। আপনি যদি চান তবে আপনি সম্পাদনা প্রোফাইল বিকল্পটি অন্তর্ভুক্ত করে ওভাররাইড করতে পারেন

  def update
  end

মধ্যে "অ্যাপ্লিকেশন / কন্ট্রোলার / registrations_controller.rb"


13

এটি একটি পুরানো প্রশ্ন - তবে আমি সম্প্রতি একই সমস্যাটি সমাধান করেছি এবং একটি সমাধান নিয়ে এসেছি যা এর চেয়ে অনেক বেশি মার্জিত:

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

এবং এটি cancel_user_registrationঅতিরিক্ত ভার্বোস না হয়ে নামযুক্ত রুটের জন্য ডিফল্ট নাম দেয় (যেমন )।

devise_for :users, skip: [:registrations]

# Recreates the Devise registrations routes
# They act on a singular user (the signed in user)
# Add the actions you want in 'only:'
resource :users,
    only: [:edit, :update, :destroy],
    controller: 'devise/registrations',
    as: :user_registration do
  get 'cancel'
end

rake routes ডিফল্ট ডিভাইস মডিউলগুলির সাথে আউটপুট:

                  Prefix Verb   URI Pattern                    Controller#Action
        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
           user_password POST   /users/password(.:format)      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                         PATCH  /users/password(.:format)      devise/passwords#update
                         PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
       user_registration PATCH  /users(.:format)               devise/registrations#update
                         PUT    /users(.:format)               devise/registrations#update
                         DELETE /users(.:format)               devise/registrations#destroy

12

আপনি "ডিভাইস_ফোর" এর আগে রেখে "ডিভাইস_স্কোপ" ওভাররাইড করতে পারেন।

devise_scope :user do
  get "/users/sign_up",  :to => "sites#index"
end

devise_for :users

এটি সর্বোত্তম উপায় কিনা তা নিশ্চিত নয় তবে এটি বর্তমানে আমার সমাধান, কারণ এটি সাইন ইন পৃষ্ঠাতে পুনঃনির্দেশ করে।


1
আমি অনুরূপ পন্থা নিয়েছি, তবে ইউআরএলও বদলাতে চেয়েছি, তাই `get" / ব্যবহারকারী / সাইন_আপ ", সাথে => পুনঃনির্দেশ (" / ")
din

তাই সহজ এবং সহজ সমাধান। তবে এই সমাধানে এক মিনিটের সমস্যা রয়েছে। ঠিকানা রয়ে গেছে। আপনার লেখা যদি /users/sign_upতারপর আপনি অ্যাক্সেস হবেন sites#indexনা sign_upকিন্তু ঠিকানাটি এখনো রয়ে যাবে /users/sign_up
পেঙ্গুইন

5

আমি @ ম্যাক্সের উত্তরটি পছন্দ করেছি , তবে এটি ব্যবহারের চেষ্টা করার devise_mappingসময় শূন্য হওয়ার কারণে আমি একটি ত্রুটিতে চলে এসেছি ।

আমি তার সমাধানটিকে সামান্য এমন একটিতে সংশোধন করেছি যা মনে হচ্ছে সমস্যাটির সমাধান করছে। এর resourceভিতরে কলটি মোড়ানো দরকার devise_scope

devise_for :users, skip: [:registrations]

devise_scope :user do
  resource :users,
           only: [:edit, :update, :destroy],
           controller: 'devise/registrations',
           as: :user_registration do
    get 'cancel'
  end
end

দ্রষ্টব্য যে devise_scopeএককটি আশা করে :userযেখানে resourceবহুবচনের প্রত্যাশা করে :users


4

Ways.rb এ এটি করুন

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

  devise_scope :user do
    get "/sign_in",  :to => "devise/sessions#new"
    get "/sign_up",  :to => "devise/registrations#new"
  end

আপনি পৃষ্ঠাটিতে সাইন ইন করতে এসে এটি ঠিক করার জন্য এখনই একটি ত্রুটি পাবেন। এই পরিবর্তনটি এতে করুন: অ্যাপ / দর্শন / পরিকল্পনা / ভাগ / ভাগ করা / _ লিঙ্কস.র্ব

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

এটি আমার পক্ষে কাজ করেছে (আমি কেবলমাত্র devise_forএবং asব্লকটি ব্যবহার করেছি) এবং আমাকে :registerableমডেলটি সরিয়ে ফেলতে হয়েছিল।
দুসান

3

আমি রুটগুলির সাথে গোলযোগ না করা বা অ্যাপ্লিকেশন নিয়ামক পদ্ধতি যুক্ত না করে এটি ভালভাবে কাজ করতে দেখেছি। আমার দৃষ্টিভঙ্গি হ'ল পদ্ধতিটি ওভাররাইড করা। এটিকে যুক্ত করুন app/controllers/devise/registrations_controller.rb আমি ব্রেভিটির জন্য অন্যান্য পদ্ধতি বাদ দিয়েছি।

class Devise::RegistrationsController < DeviseController
  ...
  # GET /resource/sign_up
  def new
    redirect_to root_path
  end
  ....
end

এছাড়াও এই পথটি এখনও অন্য ভিউগুলি থেকে পৌঁছনযোগ্য যে মায়া মুছে ফেলার জন্য আপনি এই কোডটি এখান থেকে সরাতে চাইবেন app/views/devise/shared/_links.erb

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

2

আমার ক্ষেত্রে অন্যদের জন্য।
সঙ্গে devise (3.5.2)
আমি সাফল্যের সাথে সাইনআপের রুটগুলি সরিয়ে দিয়েছি, তবে নিম্নলিখিত কোড সহ প্রোফাইল সম্পাদনা করার জন্য সেগুলি রেখেছি।

#routes.rb
devise_for :users, skip: [:registrations]
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put '/users(.:format)' => 'devise/registrations#update', as: 'user_registration'
  patch '/users(.:format)' => 'devise/registrations#update'
end

1

আমি গিয়েছিলাম যে সামান্য ভিন্ন রুট এখানে। এটি আপনাকে তৈরি করে যাতে আপনার devise/shared/_links.html.erbদৃষ্টিভঙ্গিকে ওভাররাইড করতে হবে না ।

ইন app/models/user.rb:

devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable

ইন config/routes.rb:

devise_for :users
devise_scope :user do
  put 'users' => 'devise/registrations#update', as: 'user_registration'
  get 'users/edit' => 'devise/registrations#edit', as: 'edit_user_registration'
  delete 'users' => 'devise/registrations#destroy', as: 'registration'
end

আগে:

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

পরে:

$ rake routes | grep devise
           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
              user_password POST   /users/password(.:format)                   devise/passwords#create
          new_user_password GET    /users/password/new(.:format)               devise/passwords#new
         edit_user_password GET    /users/password/edit(.:format)              devise/passwords#edit
                            PATCH  /users/password(.:format)                   devise/passwords#update
                            PUT    /users/password(.:format)                   devise/passwords#update
          user_registration PUT    /users(.:format)                            devise/registrations#update
     edit_user_registration GET    /users/edit(.:format)                       devise/registrations#edit
               registration DELETE /users(.:format)                            devise/registrations#destroy

আপনি যদি অতিরিক্ত অপ্রয়োজনীয় রুট রাখতে না চান তবে সমস্ত ডিফল্ট রুটগুলি এড়িয়ে যান, যেমনdevise_for :users, skip: :all
এলকিমিস্ট

0

আমার একই সমস্যা ছিল এবং আমি এটি নিবন্ধীকরণ পৃষ্ঠা থেকে ব্যবহারকারীদের পুনর্নির্দেশ করতে কিছুটা খারাপ অনুশীলন পেয়েছি। সুতরাং আমার সমাধানটি মূলত এগুলি ব্যবহার :registrableকরছে না।

আমি যা করেছি তা হ'ল অনুরূপ পৃষ্ঠাটি তৈরি করা যেমন ব্যবহারকারীর বিবরণগুলি সম্পাদনার মতো ছিল:

<%= form_tag(update_user_update_path, method: :post) do %>  
    <br>
    <%= label_tag(:currPassword, 'Current password:') %> <%= password_field_tag(:currPassword) %> <br>
    <%= label_tag(:newPassword, 'New password:') %> <%= password_field_tag(:newPassword) %> <br>
    <%= label_tag(:newPasswordConfirm, 'Confirm new password:') %> <%= password_field_tag(:newPasswordConfirm) %> <br>
    <%= submit_tag('Update') %>
<% end %>

সুতরাং এই ফর্মটি একটি নতুন পোস্টের শেষ পয়েন্টে জমা দেয় যা পাসওয়ার্ড আপডেট করে যা দেখে মনে হয়:

  def update
    currPass = params['currPassword']
    newPass1 = params['newPassword']
    newPass2 = params['newPasswordConfirm']
    currentUserParams = Hash.new()
    currentUserParams[:current_password] = currPass
    currentUserParams[:password] = newPass1
    currentUserParams[:password_confirmation] = newPass2
    @result = current_user.update_with_password(currentUserParams)
  end

পরে আপনি @resultব্যবহারকারীর কাছে পাসওয়ার্ড আপডেট হয়েছে কিনা তা জানাতে আপনার ভিউ ব্যবহার করতে পারেন ।


0

রুটগুলি পরিবর্তন করে সেখানে আসা অন্যান্য সমস্যাগুলির পুরো গোছা রয়েছে। আমি সবচেয়ে সহজ পদ্ধতিটি পেয়েছি নিম্নলিখিতটি করা।

ApplicationController < ActionController::Base
  before_action :dont_allow_user_self_registration

  private

  def dont_allow_user_self_registration
    if ['devise/registrations','devise_invitable/registrations'].include?(params[:controller]) && ['new','create'].include?(params[:action])
      redirect_to root_path
    end
  end
end

কাজ করে, তবে আপনি কি প্রতিটি একক ক্রিয়ায় সত্যিই এই পদ্ধতিটি চালাতে চান?
lacostenycoder

-7

আপনি deviseমণি নিজেই পরিবর্তন করতে পারেন। প্রথমে ব্যবহারের ইনস্টল করা অবস্থানটি জানতে এই কমান্ডটি চালান:

gem which devise

ধরা যাক পথটি হ'ল: /usr/local/lib/ruby/gems/1.9.1/gems/devise-1.4.2/lib/devise

তারপরে যান

/usr/local/lib/ruby/gems/1.9.1/gems/devise-1.4.2/lib/devise/lib/devise/railsএবং routes.rbডিরেক্টরিতে সম্পাদনা করুন । এমন একটি পদ্ধতি রয়েছে def devise_registration(mapping, controllers)যার মাধ্যমে আপনি নতুন ক্রিয়া থেকে মুক্তি পেতে পরিবর্তন করতে পারেন। আপনি ম্যাপিংগুলি সম্পূর্ণরূপে মুছে ফেলতে পারেনdevise_registration


বিকল্প পরামর্শের জন্য +1, তবে আমার রুটে কিছু বিশ্রী কোড রাখার চেয়ে রত্নকে কাঁটাচামচ করা আমার পক্ষে কম পছন্দসই বলে মনে হয়।
নাথান লং

4
সাধারণ অনুশীলনে এটি বড়-নো! আপনার যেমন রত্নগুলি তেমনই রাখা উচিত এবং আপনার যদি কিছু পরিবর্তন করার দরকার হয় তবে কেবল বানরগুলি তাদের প্যাচ করুন
সমমান

আমি এক্ষেত্রে আপনার সাথে একমত, তবে সাধারণভাবে আমি মনে করি না যে আপনি বিভিন্ন স্থানের একগুচ্ছ বানর প্যাচিং কোডের বিকল্প হিসাবে আপনি যে লাইব্রেরি / রত্নগুলি ব্যবহার করেন সেগুলি পরিবর্তন করা থেকে বিরত থাকবেন। আপনার প্রয়োজন অনুসারে একটি গ্রন্থাগার moldালাই করার ক্ষমতা ওপেন-সোর্স কোড আইএমও ব্যবহারের অন্যতম বড় কারণ।
অঙ্কিত সোনি

আপনি যদি রত্নটি পরিবর্তন করতে চলেছেন তবে কমপক্ষে এটি কাঁটাচামচ করুন এবং আপনার জেমফিলটিকে আপনার বানরের প্যাচযুক্ত রত্নটির দিকে নির্দেশ করুন (উদাহরণস্বরূপ গিথুব এ)। আমি বেশ কয়েকবার এটি করেছি। প্রক্রিয়াটি হ'ল: কাঁটাচুড়ি রত্ন, স্থানীয়ভাবে আপনার কাঁটাচাটি ক্লোন করুন, বানর আপনার স্থানীয় সংস্করণটি প্যাচ করুন, আপনার রিমোট রেপোতে চাপ দিন এবং এটি জেমফাইলে নির্দেশ করুন। (ie gem 'devise', github: 'yourusername/devise', branch: "master")
lacostenycoder
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.