الحصول يجعل الاعتراف مسارات التوجيه المخصصة

StackOverflow https://stackoverflow.com/questions/231538

  •  04-07-2019
  •  | 
  •  

سؤال

وهكذا لدي طريقا مخصصة أنيق لتسجيل الدخول

# routes.rb
map.login '/login', :controller => 'sessions', :action => 'new'

وزيارة www.asite.com/login وكنت هناك. كما هو العرف مع الدخول الفاشلة، إلا أننا سوف نفعل ما يلي في عملنا. ملاحظة ما يحدث على الدخول الفاشلة.

 # sessions_controller.rb

 def create
   self.current_user = User.authenticate(params[:email], params[:password])
   if logged_in?
     # some work and redirect the user
   else
     flash.now[:warning] = "The email and/or password you entered is invalid."
     render :action => 'new'
   end
 end

وهذا هو الوضع الطبيعي للغاية. ببساطة تقديم عمل جديد والمطالبة تسجيل الدخول مرة أخرى. لسوء الحظ يمكنك أيضا الحصول معها على URL القبيح: www.asite.com/session. إك! هل من الممكن الحصول على جعل احترام URL الأصلي؟

لا يوجد حل صحيح

نصائح أخرى

والمشكلة هي هذه: المستخدم الأولى مرة /login ويملأ النموذج. عندما يقدم على شكل، وآخر ل/sessions، وهذا هو السبب في التغييرات URL المتصفح. للالتفاف على هذا يمكنك أن تفعل شيئين:

وكما ذكر مايكل، يمكنك إعادة توجيه إلى: إجراء جديد، تغيير آخر ل:

 else
   flash[:warning] = "The email and/or password you entered is invalid."
   redirect_to login_path
 end

وتجدر الإشارة إلى أنك سوف تحتاج إلى تغيير ومضة ذلك هو رسالة المتاحة في الطلب التالي (بعد إعادة التوجيه).

والطريقة الثانية هي hackier قليلا، ولكن ربما يستحق الذكر. باستخدام الظروف على الطرق الخاصة بك، يمكنك تعيين كل من نموذج تسجيل دخول (وهو GET) ويقدم النموذج (الذي هو POST) إلى نفس المسار. شيء من هذا القبيل:

map.login '/login',
  :controller => 'sessions', :action => 'new', 
  :conditions => {:method => :get}

map.login_submit '/login',
  :controller => 'sessions', :action => 'create', 
  :conditions => {:method => :post}

وبعد ذلك إذا عمل النموذج الخاص بك ويقدم تسجيل الدخول المسار، يجب عمل الأشياء كما كنت تتوقع.

تغيير render :action => 'new' إلى redirect_to login_path

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top