מעדכן את הסיסמה שלך
• תהליך ההרשמה עם אבטחת אביב
• הרשמה - הפעל חשבון חדש בדוא"ל
• רישום אבטחה באביב - שלח שוב דוא"ל אימות
• הרשמה באבטחת אביב - קידוד סיסמאות
• ממשק ה- API לרישום הופך ל- RESTful
• אבטחת אביב - אפס את הסיסמה שלך
• רישום - חוזק סיסמא וכללים
• עדכון הסיסמה (המאמר הנוכחי)
1. סקירה כללית
במאמר מהיר זה נשתמש בפונקציונליות פשוטה של "שנה את הסיסמה שלי" הזמינה למשתמש לאחר הרשמתם והתחברותם.
2. צד הלקוח - שנה את דף הסיסמה שלי
בואו נסתכל על דף הצד הפשוט ביותר של הלקוח:
אי התאמה בסיסמא שינוי סיסמה var serverContext = [[@ {/}]]; פונקציה savePass () {var pass = $ ("# pass"). val (); var valid = pass == $ ("# passConfirm"). val (); אם (! תקף) {$ ("# error"). show (); לַחֲזוֹר; } $ .post (serverContext + "user / updatePassword", {password: pass, oldpassword: $ ("# oldpass"). val ()}, function (data) {window.location.href = serverContext + "/ home. html? message = "+ data.message;}). fail (function (data) {$ (" # errormsg "). show (). html (data.responseJSON.message);}); }
3. עדכן את סיסמת המשתמש
בואו וניישם כעת גם את פעולת צד השרת:
@PostMapping ("/ user / updatePassword") @PreAuthorize ("hasRole ('READ_PRIVILEGE')") שינוי GenericResponse ציבורי UserPassword (אזור האזור, @RequestParam ("סיסמה") סיסמת מחרוזת, @RequestParam ("סיסמה ישנה") משתמש משתמש = userService.findUserByEmail (SecurityContextHolder.getContext (). GetAuthentication (). GetName ()); if (! userService.checkIfValidOldPassword (user, oldPassword)) {זרוק InvalidOldPasswordException חדש (); } userService.changeUserPassword (משתמש, סיסמה); להחזיר GenericResponse חדש (messages.getMessage ("message.updatePasswordSuc", null, locale)); }
שימו לב כיצד השיטה מאובטחת באמצעות ה- @ PreAuthorize ביאור, שכן הוא צריך נגיש רק למשתמשים מחוברים.
4. מבחני API
לבסוף, בואו נצרוך את ה- API עם כמה בדיקות API כדי לוודא שהכל עובד בסדר; נתחיל עם התצורה הפשוטה של הבדיקה ואתחול הנתונים:
@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {ConfigTest.class, PersistenceJPAConfig.class}, loader = AnnotationConfigContextLoader.class) מחלקה ציבורית ChangePasswordApiTest {פרטית סופית מחרוזת URL_PREFIX = "80 /" local " כתובת פרטית מחרוזת סופית פרטית = URL_PREFIX + "/ user / updatePassword"; @ UserRepository פרטית אוטומטית userRepository; @Autowired פרטי PasswordEncoder passwordEncoder; FormAuthConfig formConfig = FormAuthConfig חדש (URL_PREFIX + "/ login", "שם משתמש", "סיסמה"); @ לפני init בטל פומבי () {משתמש משתמש = userRepository.findByEmail ("[מוגן באמצעות דוא"ל]"); אם (משתמש == null) {משתמש = משתמש חדש (); user.setFirstName ("מבחן"); user.setLastName ("מבחן"); user.setPassword (passwordEncoder.encode ("מבחן")); user.setEmail ("[דוא"ל מוגן]"); user.setEnabled (נכון); userRepository.save (user); } אחר {user.setPassword (passwordEncoder.encode ("מבחן")); userRepository.save (user); }}}
עכשיו - בואו ננסה שנה סיסמה עבור משתמש מחובר:
@Test הציבור בטל givenLoggedInUser_whenChangingPassword_thenCorrect () {RequestSpecification בקשה = RestAssured.given (). Auth () .form ("[מוגן באמצעות דוא"ל]," test ", formConfig); Params מפה = HashMap חדש (); params.put ("oldpassword", "test"); params.put ("סיסמה", "חדש ביותר"); תגובה תגובה = request.with (). Params (params) .post (URL); assertEquals (200, response.statusCode ()); assertTrue (response.body (). asString (). מכיל ("הסיסמה עודכנה בהצלחה")); }
הבא - בואו ננסה לשנות סיסמה קיבלה סיסמה ישנה שגויה:
@Test ציבורי בטל givenWrongOldPassword_whenChangingPassword_thenBadRequest () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Params מפה = HashMap חדש (); params.put ("oldpassword", "abc"); params.put ("סיסמה", "חדש ביותר"); תגובה תגובה = request.with (). Params (params) .post (URL); assertEquals (400, response.statusCode ()); assertTrue (response.body (). asString (). מכיל ("סיסמה ישנה לא חוקית")); }
לסיום - בואו ננסה לשנות סיסמה ללא אימות:
@Test public void givenNotAuthenticatedUser_whenChangingPassword_thenRedirect () {Map params = HashMap new (); params.put ("oldpassword", "abc"); params.put ("סיסמה", "xyz"); תגובת תגובה = RestAssured.with (). Params (params) .post (URL); assertEquals (302, response.statusCode ()); assertFalse (response.body (). asString (). מכיל ("הסיסמה עודכנה בהצלחה")); }
שים לב כיצד - לכל בדיקה - אנו מספקים FormAuthConfig לטפל באימות.
אנו גם מאפסים את הסיסמה באמצעות init () כדי לוודא שאנחנו משתמשים בסיסמה הנכונה לפני הבדיקה.
5. מסקנה
וזה מעטפת - דרך פשוטה לאפשר למשתמש לשנות את הסיסמה שלו לאחר ההרשמה והתחברות ליישום.
ה יישום מלא של מדריך זה ניתן למצוא בפרויקט github - זהו פרויקט מבוסס ליקוי חמה, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.
« רישום קודם - חוזק סיסמא וכללים