首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为新注册用户自动生成链接

为新注册用户自动生成链接
EN

Stack Overflow用户
提问于 2013-03-17 08:10:23
回答 2查看 3.5K关注 0票数 1

我想为新创建的自动生成链接

用户,mywebapp将发送到用户的电子邮件。什么时候

用户单击我应该更新的链接,如

“激活”。

所以我有一些问题想知道如果

根据我目前所读到的,我的逻辑是正确的。

  1. 用户填写表单并按enter键。

2.我的网页服务处理资料及建立户口.

这就是我用一些唯一的salt散列输入密码并将其存储在数据库中的部分。

所以我要一张桌子

代码语言:javascript
运行
复制
user_ID   username         password                 active 

1           taniamm20     12346645556665566666       0

例如,我可以在验证链接中使用这个散列密码吗?

代码语言:javascript
运行
复制
http://localhost:9092/localbusscat/services/localbusscat/UpdateDB?choID=12346645556665566666       

这是一个很好的练习吗?

或者此时,我不应该保存用户的密码,只应该保存user_id并使用java.UUIID为该用户生成长的唯一密钥,并将其保存在表中并使用这个唯一的键进行验证。

我想我的UpdateDBService应该是这样的

代码语言:javascript
运行
复制
public  String  UpdateDB(int choID ) throws ClassNotFoundException 
        {

            String strDelReturn = "UPDATE_FAIL";

            Class.forName("org.postgresql.Driver");
            try 
            {
                conn = DriverManager.getConnection("....");
            }

            catch (SQLException ex) 
            {

                ex.printStackTrace();
            }


            PreparedStatement pstmt = null;
            String selectQuery = "update user_table set active=active+1 WHERE password="+ choID ;

            try {

                pstmt = conn.prepareStatement(selectQuery);
                int rowss = pstmt.executeUpdate();
                if (rowss != 0) 
                    strDelReturn = "UPDATE_OK";

            } 
            catch (Exception ex) 
            {

            }
            return strDelReturn;
}
EN

Stack Overflow用户

回答已采纳

发布于 2013-03-17 08:21:48

我的建议使用了第二个表,称为pending

它基本上是用户表的“扩展”,或者主要数据的副本,这取决于您的结构。

这张表,以它最纯净的形式,看起来如下:

代码语言:javascript
运行
复制
UID (int), ActCode (Varchar[x]), ValidUntil (int)

UID和ActCode都是唯一的,这意味着每个UID一次只能发出一个ActCode,每个ActCode只能关联一次。ValidUntil包含希望您的有效期为UNIX_TIMESTAMP() + x seconds...whatever的返回值。

这个结构表明,实际的用户表将id, userdata, activated作为列。

如果该链接在x秒内没有使用,则该链接将变得无效(UNIX_TIMESTAMP() > ValidUntil),并可能生成一个新的激活链接,而旧的则被删除。

或者,您可以获取(与每个与激活相关的请求)过期的激活,并删除与其关联的用户数据。

如果在间隔内单击链接,则将删除激活代码并更新用户标志。

另一个选项是扩展用户表:

代码语言:javascript
运行
复制
ActCode, ValidUntil, Userdata

这样,您的UserTable将完全排除在选择之外,只有在UserData仍然有效的情况下,才会插入ActCode。这将保护您的AutoIncrement不受非激活帐户的影响,并且您不需要在用户表either...because中设置一个Activated字段,只要它在您的用户表中就被激活了。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15458793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档