Oppdaterer passordet ditt

Denne artikkelen er en del av en serie: • Opplæringsveiledning for vårsikkerhetsregistrering

• Registreringsprosessen med vårsikkerhet

• Registrering - Aktiver en ny konto via e-post

• Vårsikkerhetsregistrering - Send bekreftelses-e-post på nytt

• Registrering med vårsikkerhet - passordkoding

• Registrerings-API-et blir RESTful

• Spring Security - Tilbakestill passordet ditt

• Registrering - Passordstyrke og regler

• Oppdatere passordet ditt (nåværende artikkel)

1. Oversikt

I denne raske artikkelen implementerer vi en enkel “Endre mitt eget passord” -funksjonalitet tilgjengelig for brukeren etter at de registrerer seg og logger på.

2. Klientside - Endre passordsiden

La oss ta en titt på den veldig enkle siden på klienten:

 Passord misforhold Endre passord var serverContext = [[@ {/}]]; funksjon savePass () {var pass = $ ("# pass"). val (); var valid = pass == $ ("# passConfirm"). val (); hvis (! gyldig) {$ ("# feil"). vis (); komme tilbake; } $ .post (serverContext + "user / updatePassword", {password: pass, oldpassword: $ ("# oldpass"). val ()}, function (data) {window.location.href = serverContext + "/ home. html? message = "+ data.message;}). fail (funksjon (data) {$ (" # errormsg "). show (). html (data.responseJSON.message);}); } 

3. Oppdater brukerpassord

La oss nå implementere serverserveringen også:

@PostMapping ("/ user / updatePassword") @PreAuthorize ("hasRole ('READ_PRIVILEGE')") public GenericResponse changeUserPassword (locale locale, @RequestParam ("password") String password, @RequestParam ("oldpassword") String oldPassword) Brukerbruker = userService.findUserByEmail (SecurityContextHolder.getContext (). GetAuthentication (). GetName ()); if (! userService.checkIfValidOldPassword (user, oldPassword)) {kast nytt InvalidOldPasswordException (); } userService.changeUserPassword (bruker, passord); returner nye GenericResponse (messages.getMessage ("message.updatePasswordSuc", null, locale)); }

Legg merke til hvordan metoden er sikret via @PreAuthorize kommentar, siden det burde bare tilgjengelig for påloggede brukere.

4. API-tester

Til slutt, la oss konsumere API-en med noen API-tester for å sikre at alt fungerer bra; vi begynner med den enkle konfigurasjonen av testen og datainitialiseringen:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {ConfigTest.class, PersistenceJPAConfig.class}, loader = AnnotationConfigContextLoader.class) public class ChangePasswordApiTest {private final String URL_PREFIX = "// 80 privat sluttstreng URL = URL_PREFIX + "/ bruker / updatePassword"; @Autowired privat UserRepository userRepository; @Autowired privat PasswordEncoder passordEncoder; FormAuthConfig formConfig = ny FormAuthConfig (URL_PREFIX + "/ login", "brukernavn", "passord"); @Før offentlig ugyldig init () {Bruker bruker = userRepository.findByEmail ("[e-postbeskyttet]"); hvis (bruker == null) {bruker = ny bruker (); user.setFirstName ("Test"); user.setLastName ("Test"); user.setPassword (passwordEncoder.encode ("test")); user.setEmail ("[email protected]"); user.setEnabled (true); userRepository.save (bruker); } annet {user.setPassword (passwordEncoder.encode ("test")); userRepository.save (bruker); }}}

Nå - la oss prøve å endre passord for en innlogget bruker:

@Test offentlig ugyldighet gittLoggedInUser_whenChangingPassword_thenCorrect () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Kartparametere = nye HashMap (); params.put ("oldpassword", "test"); params.put ("passord", "nyeste"); Svarrespons = request.with (). Params (params) .post (URL); assertEquals (200, respons.statusCode ()); assertTrue (respons.body (). asString (). inneholder ("Passord oppdatert vellykket")); }

Neste - la oss prøve å endre passord gitt feil gammelt passord:

@Test offentlig ugyldig givenWrongOldPassword_whenChangingPassword_thenBadRequest () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Kartparametere = nye HashMap (); params.put ("oldpassword", "abc"); params.put ("passord", "nyeste"); Svarrespons = request.with (). Params (params) .post (URL); assertEquals (400, respons.statusCode ()); assertTrue (respons.body (). asString (). inneholder ("Ugyldig gammelt passord")); }

Til slutt - la oss prøve å endre passord uten godkjenning:

@Test offentlig ugyldighet gittNotAuthenticatedUser_whenChangingPassword_thenRedirect () {Map params = new HashMap (); params.put ("oldpassword", "abc"); params.put ("passord", "xyz"); Svarrespons = RestAssured.with (). Params (params) .post (URL); assertEquals (302, response.statusCode ()); assertFalse (respons.body (). asString (). inneholder ("Passord oppdatert vellykket")); }

Legg merke til hvordan - for hver test - gir vi en FormAuthConfig for å håndtere autentiseringen.

Vi tilbakestiller også passordet via i det() for å sikre at vi bruker riktig passord før testen.

5. Konklusjon

Og det er en wrap - en grei måte å la brukeren endre sitt eget passord etter å ha registrert og logget på applikasjonen.

De full gjennomføring av denne opplæringen finnes i github-prosjektet - dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.

« Tidligere registrering - Passordstyrke og regler

$config[zx-auto] not found$config[zx-overlay] not found