مصادقة مستخدم في وحدة تحكم منفصلة مع Restful_Authentication
-
12-09-2019 - |
سؤال
أحاول أن أتمكن من تسجيل الدخول بسرعة أكبر قدر ممكن، لذلك أريد أن يكون المستخدمون قادرين على تسجيل الدخول وإنشاء سجلات في نفس النموذج.
هل من الممكن مصادقة مستخدم مع البرنامج المساعد Restful_Authentication من أي وحدة تحكم من خلال استدعاء طريقة إنشاء بطريقة أو بأخرى في وحدة تحكم الجلسة، وإرجاع المستخدم المصادق عليه؟ يبدو أن هذا يمكن القيام به بسهولة بطريقة أو بأخرى، لكنني لا أستطيع معرفة كيفية القيام بذلك في القضبان.
ربما شيء مثل:
# Records Controller Controller Ref Create إذا كانت بالفقر [: تسجيل الدخول] && Params [: كلمة المرور] # هذه الطريقة ستدعو / جلسة / وقم بعملية تسجيل الدخول / كلمة مرور المستخدم = Authenticate_User (Params [: تسجيل الدخول "]، Params [: كلمة المرور]) record = record.new (Params [: سجل]) @ record.user = المستخدم إذا كان السؤال .Save && فلاش المستخدم [: إشعار] = "تم إنشاء سجل بنجاح". redirect_to (@ record) نهاية النهاية
أي أفكار حول كيفية القيام بذلك سيكون موضع تقدير!
المحلول
لقد اختبرت هذا الرمز على القضبان 2.3.4 ويعمل؛ يبقى المستخدم مسجلا. ضع في اعتبارك أنه يجب عليك محاولة إعادة المرسل بحيث يعيش رمز المصادقة في مكان واحد، بدلا من وجوده مكررة في العديد من وحدات التحكم.
لاحظ أيضا أن رمز المصادقة في هذا القصاص هو إصدار مبسط من ذلك في وحدة تحكم الجلسات، لذلك لا يتعامل مع أي من وظائف "تذكرني".
# POST /stacks
# POST /stacks.xml
def create
@stack = Stack.new(params[:stack])
if params[:login] && params[:password]
logout_keeping_session!
user = User.authenticate(params[:login], params[:password])
self.current_user = user
end
respond_to do |format|
if !user
flash[:error] = 'Login details incorrect.'
format.html { render :action => "new" }
format.xml { render :xml => @stack.errors, :status => :unprocessable_entity }
elsif @stack.save
flash[:notice] = 'Stack was successfully created.'
format.html { redirect_to(@stack) }
format.xml { render :xml => @stack, :status => :created, :location => @stack }
else
format.html { render :action => "new" }
format.xml { render :xml => @stack.errors, :status => :unprocessable_entity }
end
end
end