Хобрук: Ваш путь к мастерству в программировании

Как изменить пользователя (даже пароль) с помощью SpringSecurity Core и пользовательского интерфейса в Grails

моя цель - создать страницу редактирования, где пользователь может изменить свои данные.

это моя _форма:

<div class="fieldcontain ${hasErrors(bean: user, field: 'firstName', 'error')} required">
<label for="firstName">
<g:message code="userSec.firstName.label" default="First Name" />
<span class="required-indicator">*</span>
</label>
<g:textField name="firstName" required="" value="${user?.firstName}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: user, field: 'lastName', 'error')} required">
<label for="lastName">
<g:message code="userSec.lastName.label" default="Last Name" />
<span class="required-indicator">*</span>
</label>
<g:textField name="lastName" required="" value="${user?.lastName}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: user, field: 'username', 'error')} required">
<label for="username">
<g:message code="userSec.username.label" default="Username" />
<span class="required-indicator">*</span>
</label>
<g:textField name="username" required="" value="${user?.username}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: user, field: 'email', 'error')} required">
<label for="email">
<g:message code="userSec.email.label" default="Email" />
<span class="required-indicator">*</span>
</label>
<g:field type="email" name="email" required="" value="${user?.email}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: command, field: 'password', 'error')} required">
<label for="password"> 
<g:message code="user.password.label" default="Password" />
<span class="required-indicator">*</span>
</label>
<g:field type="password" name="password" class="passwd" required="" value="${command.password}" />
<span id="result"></span>
</div>
<div class="fieldcontain ${hasErrors(bean: command, field: 'password2', 'error')} required">
<label for="password2"> 
<g:message code="user.password2.label" default="Password (again)" />
<span class="required-indicator">*</span>
</label>
<g:field type="password" name="password2" required="" value="${command.password2}" />
</div>

и это моя страница редактирования:

<%@ page import="p2s.UserSec" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'userSec.label', default: 'UserSec')}" />
<title><g:message code="default.edit.label" args="[entityName]" /></title>
</head>
<body>
<a href="#edit-userSec" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></a>
<div class="nav" role="navigation">
<ul>
<li><a class="home" href="${createLink(uri: '/')}"><g:message code="default.home.label"/></a></li>
</ul>
</div>
<div id="edit-userSec" class="content scaffold-edit" role="main">
<h1><g:message code="default.edit.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<g:hasErrors bean="${user}">
<ul class="errors" role="alert">
<g:eachError bean="${user}" var="error">
<li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
</g:eachError>
</ul>
</g:hasErrors>
<g:form url="[resource:user, action:'update']" method="PUT" >
<g:hiddenField name="version" value="${user?.version}" />
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
</fieldset>
</g:form>
</div>
</body>
</html>

Как я могу позволить пользователю изменять свои данные? У меня много проблем с паролем, потому что я не могу его расшифровать и сопоставить с паролем, который дает мне пользователь, когда хочет его изменить.

Я хотел бы использовать метод Spring для этого.

Спасибо всем, извините, если это простой вопрос, но я новичок в Grails.

14.01.2014

  • Вы не расшифровываете существующий пароль, вы хешируете новый и сопоставляете хэш. 15.01.2014

Ответы:


1

Не отображать старый пароль, даже с символами *, так как он хешируется и вообще бесполезен. Дайте им пустое поле пароля, и если вы хотите, чтобы они ввели его дважды, добавьте секунду и добавьте ошибку проверки, если они не совпадают.

Вам не нужно беспокоиться, если пароль изменился. Если они повторно введут тот же пароль, что и раньше, он будет иметь тот же хэш (или в bcrypt эквивалентный хэш), и это поле не будет считаться измененным. Пока они уже аутентифицированы, вам все равно, изменят они это или нет.

15.01.2014
Новые материалы

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

Ториго  — революция в игре Го
Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

Математика и интуиция - Часть 1
У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..