我希望你能帮助我找到在不使用密码的情况下实现手动(服务器端启动)登录的最佳方法.让我解释一下工作流程:
我想要做的是在用户点击电子邮件链接后登录用户,这样他就可以立即开始使用该网站.
我不能使用他的密码,因为它是在DB中加密的,是编写自定义身份验证后端的唯一选择吗?
是否可以使用Identity Framework测试确认电子邮件令牌是否已过期UserManager
?无论错误是什么,请从以下内容:
var result = await UserManager.ConfirmEmailAsync(userId, code);
Run Code Online (Sandbox Code Playgroud)
我得到一个通用的"无效令牌"错误.
我正在创建一个涉及用户注册的PHP网站,我想知道"电子邮件确认"代码的最佳实践.
新用户必须确认他们的电子邮件地址 - 我这样做是通过生成代码并通过电子邮件将其发送给用户,然后他可以使用该电子邮件激活他的帐户.我没有将这个密钥存储在数据库中,而是使用了一个方便的小解决方法:代码是以下结果:
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
Run Code Online (Sandbox Code Playgroud)
其中$ timestamp是指用户创建时间.总的来说,我对此非常满意,但后来我开始思考,这是否足够安全?碰撞的可能性怎么样?我还需要生成密码重置等代码.如果我使用类似的方法,碰撞可能导致一个用户无意中重置另一个用户的密码.这不好.
那你怎么做这些事呢?我的想法是以下格式的表格:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
Run Code Online (Sandbox Code Playgroud)
其中'type'为1,2或3表示"激活","电子邮件更改"或"密码重置".这是一个很好的方式吗?你有更好的方法吗?
使用类似上面的方法,我可以在不使用cron-jobs的情况下自动删除两天以上的任何内容吗?我的主人(almostfreespeech.net)不支持他们.如果可能的话,我想避免在外部主机上有一个cron-job,这是一个删除东西的脚本,因为那只是凌乱= P.
谢谢!
马拉
更新:
澄清:我已经意识到安全和安全地执行此任务的唯一方法是使用数据库,这是原始功能试图避免的.我的问题是如何构建表(或表?).有人建议我不要使用codePK,只需将代码设为PK即可.简而言之,我的问题是:这是你做的吗?
我正在编写一个程序,它会发送电子邮件,并想知道接收方何时收到我发给他的电子邮件.如何使用JavaMail API执行此操作?
如果我使用SMTPMessage,在设置通知选项后如何处理结果?
SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
Run Code Online (Sandbox Code Playgroud) 我正在尝试延长确认电子邮件和密码重置电子邮件的生命周期,但我无法做到这一点.目前我正在使用Asp.net核心1.0.1,如果这有用的话.
一些提示甚至更好的代码,将非常感激.
谢谢
asp.net-mvc password-recovery email-confirmation asp.net-identity asp.net-core
如果 Cognito 用户丢失了他的确认电子邮件,则无法重置他的密码,或者如果他处于“force_change_password”状态,则要求重新发送,并且不会向他显示任何错误。
有任何已知的修复方法吗?
我已经设置了Devise on Rails 4.2.0并且一切似乎都在工作,我使用了以下指南:
http://sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/
我的设计模块是:
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,如果我尝试通过转到注册页面创建一个新帐户,然后在输入我的电子邮件和新密码(两次)后,我将被带回登录页面并看到"未经验证"的消息:
You need to sign in or sign up before continuing
Run Code Online (Sandbox Code Playgroud)
相反,我应该得到'send_instructions'消息:
You will receive an email with instructions for how to confirm your email address in a few minutes.
Run Code Online (Sandbox Code Playgroud)
我的ApplicationController中有一个before_filter:
before_filter :authenticate_user!, :except => [:show]
Run Code Online (Sandbox Code Playgroud)
虽然我承认我不明白为什么这不会在登录页面或"忘记密码"页面上给我验证错误.无论哪种方式,我尝试添加:new_user_session到:除了,但这没有帮助.
当有人注册时,如何获得正确的闪存通知?
我没有覆盖任何设计代码(除了sourcey doc建议的内容),我的DeviseHelper只有一个打印出flash消息的方法:
def devise_error_messages!
return '' if resource.errors.empty?
messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
messages.html_safe
end
Run Code Online (Sandbox Code Playgroud)
编辑:
我最初搜索SO没有帮助(太多类似的问题没有相关性),但现在我发现了这个:
所以我认为问题是,在我执行sign_up操作后,Devise正试图将我带到root_path.我不知道为什么会这样做:确认设置,它似乎应该带我回到sign_in页面.
我尝试通过使用以下命令覆盖cutom注册控制器中的'after_sign_up_path_for'来覆盖它:
也许我做错了,但这似乎没有帮助.
所以现在的问题是,在有人做sign_up后,如何让Devise回到sign_in页面,为什么这不是可确认设置的默认操作?
ruby ruby-on-rails confirmation-email email-confirmation devise
我将 Django 2.0.10 与 rest-framework、rest-auth 和 allauth 一起使用。我有一个自定义用户模型。
我使用 allauth 视图进行了电子邮件验证。当用户注册时发送验证电子邮件。如果我单击电子邮件中的链接,我将被带到一个页面,其中有一个按钮可以单击以验证电子邮件。这一切都没有错误。但是我无法找出是什么这实际上呢。用户数据中的字段似乎没有改变。
我想要的行为是让用户能够注册和登录,但只能在他们验证电子邮件后才能向网站添加内容。
编辑:这篇文章给出了部分答案,但没有说明如何将验证状态保存为用户的属性,以便您在加载用户数据时可以在前端进行检查。
设置.py
# django rest auth
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
OLD_PASSWORD_FIELD_ENABLED = True
LOGOUT_ON_PASSWORD_CHANGE = False
ACCOUNT_EMAIL_VERIFICATION = 'optional'
Run Code Online (Sandbox Code Playgroud)
api/urls.py
from allauth.account.views import confirm_email
urlpatterns = [
re_path(r'^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$', confirm_email,
name='account_confirm_email'),
...
]
Run Code Online (Sandbox Code Playgroud)
用户/模型.py
import uuid
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models
from django.utils.http import int_to_base36
class CustomUserManager(UserManager):
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username}) …
Run Code Online (Sandbox Code Playgroud) 我初始化了一个新的 Strapi 服务器并使用不同的数据库,当注册新用户时,我不断收到相同的“消息”:“电子邮件已被占用”错误。我每次都使用不同的用户名和不同的电子邮件。我也根本无法让电子邮件确认起作用。
我正在构建一个MVC 4应用程序,从默认的Internet应用程序开始.我的目标是在用户注册到网站时向用户发送确认电子邮件,我已设法发送确认电子邮件,但是当我点击它时,帐户未被确认.
注意:我知道注册操作很拥挤,当我使其工作时,我会将各个文件分开.
*这就是我所做的:*
注册行动
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
try //CreateUserAndAccount
{
var token = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, true);
if (token != null)
{
var hosturl =
System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +
"/Account/ConfirmAccount?token=" + token;
var confirmationLink = string.Format("<a href=\"{0}\">Clink to confirm your registration</a>",
hosturl);
var message = new MailMessage("komengem@gmail.com", model.UserName)
{
Subject = "Please confirm your email",
Body = confirmationLink
};
var client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);
}
TempData["message"] = …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×2
django ×2
activation ×1
asp.net ×1
asp.net-core ×1
c# ×1
devise ×1
email ×1
java ×1
login ×1
php ×1
registration ×1
ruby ×1
security ×1
smtp ×1
strapi ×1