التعامل مع إعادة التوجيه إلى صفحة معينة
-
23-12-2019 - |
سؤال
أنا استخدم قفل مركب للحصول على إذن.أحتاج إلى إعادة توجيه المستخدم إذا كان موجودًا (subjectPresent
).على سبيل المثال، تعرض وحدة التحكم هذه صفحة التسجيل:
public static Result signup() {
return ok(signup.render())
}
ولكن إذا كان المستخدم موجودًا بالفعل (فهو مسجل بالفعل)، فيجب على وحدة التحكم المذكورة أعلاه إعادة توجيهه إلى صفحة ملفه الشخصي: return ok(profilePage.render())
كيف يمكن أن تفعل ذلك مع الشرح؟
المحلول
Deadbolt ليس مخصصًا لهذا النوع من التبديل الشرطي، ولكن يمكنك اختراقه بالطريقة التالية:
- قم بإنشاء DeadboltHandler آخر، يسمى شيئًا مثل SubjectPresentHandler
- قم بتطبيق طريقة SubjectPresentHandler#onAuthFailure لإعادة التوجيه إلى صفحة الملف الشخصي
قم بتعليق طريقة التسجيل الخاصة بك باستخدام
@SubjectNotPresent(handler=SubjectPresentHandler.class)
يؤدي هذا إلى فشل التخويل في حالة وجود مستخدم.سيؤدي هذا بعد ذلك إلى استدعاء SubjectPresentHandler#onAuthFailure للحصول على النتيجة.
ومع ذلك، شخصيًا سأفكر في إضافة اختبار بسيط ضمن طريقة التسجيل على غرار
public static Result signup() {
Result result;
User user = // however you normally get your user
if (user == null) {
result = ok(signup.render())
} else {
result = redirect(routes.<your profile view method>);
}
return result;
}