سؤال

أنا استخدم قفل مركب للحصول على إذن.أحتاج إلى إعادة توجيه المستخدم إذا كان موجودًا (subjectPresent).على سبيل المثال، تعرض وحدة التحكم هذه صفحة التسجيل:

public static Result signup() {
     return ok(signup.render())
 }

ولكن إذا كان المستخدم موجودًا بالفعل (فهو مسجل بالفعل)، فيجب على وحدة التحكم المذكورة أعلاه إعادة توجيهه إلى صفحة ملفه الشخصي: return ok(profilePage.render())

كيف يمكن أن تفعل ذلك مع الشرح؟

هل كانت مفيدة؟

المحلول

Deadbolt ليس مخصصًا لهذا النوع من التبديل الشرطي، ولكن يمكنك اختراقه بالطريقة التالية:

  1. قم بإنشاء DeadboltHandler آخر، يسمى شيئًا مثل SubjectPresentHandler
  2. قم بتطبيق طريقة SubjectPresentHandler#onAuthFailure لإعادة التوجيه إلى صفحة الملف الشخصي
  3. قم بتعليق طريقة التسجيل الخاصة بك باستخدام

    @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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top