我正在构建基于网络的应用程序的spring mvc和spring security.
我已经实现了重置密码功能.系统管理员将重置任何用户的密码.随机生成的密码将通过电子邮件发送给用户,同样将在数据库中更新.
现在我希望每当用户使用随机生成的密码登录时,我想强制用户更改其密码.
请查看我的用户 TABLE.
userid bigint(20)
username varchar(20)
password varchar(65)
email varchar(50)
firstname varchar(20)
lastname varchar(20)
groupname varchar(50)
enabled tinyint(1)
credentialsNonExpired tinyint(1)
我的认证提供商
<!--
Configuring Authentication Provider to make use of spring security
provided Jdbc user management service
-->
<authentication-provider user-service-ref="jdbcUserService">
<!--
Configuring SHA-1 Password Encoding scheme to secure user credential
-->
<password-encoder ref="sha1PasswordEncoder" />
</authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
我使用JDBCUserDetailsService将JDBCDaoImpl扩展为jdbcUserService.
我想在重置密码时将credentialNonExpired设置为我的用户表的false列.
我能够做到这一点.
但是当我登录时,spring security JDBCuserdetailsservice loadUserbyUsername只获取用户名,密码,启用列和其他所有字段设置为true.
protected List<UserDetails> loadUsersByUsername(String …
Run Code Online (Sandbox Code Playgroud) 我想强制用户在首次登录后更改密码.现在,我应该在哪里将重定向代码放到ChangePassword页面?
Page_Load
默认页面中,用户可以移动到任何页面,因为他是经过身份验证的.如果我把它放在Page_Load
Master页面中,ChangePassword页面使用相同的母版页,它将进入无限循环的重定向.
我虽然忽略了重定向,如果它Page
是Master页面中的ChagePassword页面,我发现这个答案说:
这听起来像个坏主意.主人的想法是它不应该关心哪个页面,因为这是每个页面的所有常用代码.
任何建议!
我刚刚安装了Virtuoso的opensource软件包,我正在运行名为Conductor的web gui.
它需要登录,但我不认为在安装过程中有任何设置.
这是默认的un/pass吗?如果现在,我该怎么设置?
我想做两件事:
1)更改默认的"编辑用户表单" - 随设备提供 - 删除"密码"并允许更新其他字段而无需输入密码,即删除密码的默认验证.
2)创建一个单独的表单来更改密码
我有一切工作,只有一个问题,在单独的表格更新密码,我已经包括一个当前密码的字段.使用表单时,没有对当前密码进行验证,所以我改变了
@user.update_attributes(params[:user])
Run Code Online (Sandbox Code Playgroud)
至
@user.update_with_password(params[:user])
Run Code Online (Sandbox Code Playgroud)
这有效,但它提出了另一个问题.返回主表单中除了密码之外的所有其他详细信息,表单现在要求"当前密码".如果没有验证主表单上调用的当前密码,我怎样才能实现这一目的?
这是我的注册控制器:
def update
@user = User.find(current_user.id)
if @user.update_attributes(params[:user])
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
clean_up_passwords(resource)
respond_with_navigational(resource) do
if params[:change_password] # or flash[:change_password]
render :change_password
else
render :edit
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
我找到了解决问题的方法(虽然非常混乱):
def update
@user = User.find(current_user.id)
if params[:user][:password].blank?
if @user.update_attributes(params[:user])
set_flash_message :notice, :updated
# Sign in the user …
Run Code Online (Sandbox Code Playgroud) html5现在为该autocomplete
属性提供了一些新的属性值,以在自动填充表单时帮助用户代理。新值之一new-password
用于告诉用户代理输入新密码,而不是用户当前密码。
但是我不清楚,当您的表单使用户两次输入新密码作为确认时,如何正确地告诉它在两个字段中生成相同的密码?也许通过section-*
在两个输入上使用相同的自定义前缀,例如autocomplete="new-password section-my-new-pw"
?规范中提到section-*
前缀会影响自动填充范围,但是对于我的情况而言,它并不过分具体。
我想这是一个示例表单,它代表了许多网站不久将要使用的表单-区分了current-password
和new-password
,并让用户确认新密码。
<form>
<p>Username <input type="text" autocomplete="username" name="username"></p>
<p>Current Password <input type="password" autocomplete="current-password" name="current-password"></p>
<p>New Password <input type="password" autocomplete="new-password" name="new-password"></p>
<p>Confirm New Password <input type="password" autocomplete="new-password" name="confirm-new-password"></p>
</form>
Run Code Online (Sandbox Code Playgroud)
如果答案引用的文档与有关当前浏览器或扩展程序行为的观察相反,则我更喜欢。
django的新手在这里,当前正在尝试使用admin password_reset函数来实现密码恢复,但出现错误。根据我对其他遇到类似问题的人的了解,这是某种端口/套接字问题,但我不确定如何进行更改或修复。我应该提到我是通过虚拟ubuntu运行此命令的,不确定是否与此有关。
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/password_reset/
Django Version: 1.1.4
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'homework.events',
'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware')
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
99. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/views.py" in password_reset
116. form.save(**opts)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/forms.py" in save
136. t.render(Context(c)), None, [user.email])
File "/usr/local/lib/python2.6/dist-packages/django/core/mail.py" in send_mail
407. connection=connection).send()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail.py" in send
281. return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.6/dist-packages/django/core/mail.py" in send_messages
179. new_conn_created = self.open()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail.py" in open
144. local_hostname=DNS_NAME.get_fqdn()) …
Run Code Online (Sandbox Code Playgroud) python django change-password django-admin password-recovery
我已经在Glassfish/Netbeans中设置了Derby DB密码.我还检查了记住我的复选框.
现在我不能再更改密码了.
因此,我尝试为在 Django 上运行并使用 Djongo 的网站创建密码重置链接。每当我输入密码并单击重置密码按钮时,都会出现此错误:
Environment:
Request Method: POST
Request URL: http://localhost:8000/password-reset/
Django Version: 3.1.4
Python Version: 3.8.3
Installed Applications:
['blog.apps.BlogConfig',
'users.apps.UsersConfig',
'crispy_forms',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cleanup']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\cursor.py", line 51, in execute
self.result = Query(
File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\sql2mongo\query.py", line 783, in __init__
self._query = self.parse()
File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\sql2mongo\query.py", line 875, in parse
raise e
File "C:\Users\Harry\anaconda3\envs\agrifarm\lib\site-packages\djongo\sql2mongo\query.py", line 856, in parse
return handler(self, statement)
File …
Run Code Online (Sandbox Code Playgroud) 我正在尝试添加autocomplete=new-password
到一些用户编辑表单中,但它未能遵循 Chrome 79 和 Firefox 71 中的正确行为。这两种浏览器都应该支持它。
这里有什么问题?
我创建了两个非常简单的示例来消除对问题的任何外部干扰。它们可以从任何 HTTP 服务器(例如php -S localhost:8999
)提供服务。第一个页面触发“保存登录”功能,但第二个页面不应该使用该信息来自动完成密码 - 然而,它确实如此。
<!-- login.htm -->
<html>
<head></head>
<body>
<form action="edit.htm" method="post">
<label>Login <input type="text" name="login" /></label></br>
<label>Password <input type="password" name="pwd" /></label><br />
<input type="submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
<head></head>
<body>
<form>
<label>Login <input type="text" name="login" /></label></br>
<label>New Password <input type="password" name="pwd" autocomplete="new-password" /></label><br />
<input type="submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这不完全是“如何使用 autocomplete=new-password”的重复,因为行为似乎已经改变或记录不全。
change-password ×10
autocomplete ×2
django ×2
passwords ×2
python ×2
asp.net ×1
autofill ×1
c# ×1
credentials ×1
derby ×1
devise ×1
django-admin ×1
djongo ×1
forms ×1
html ×1
html5 ×1
javascript ×1
login ×1
mongodb ×1
redirect ×1
virtuoso ×1