我想为新创建的自动生成链接
用户,mywebapp将发送到用户的电子邮件。什么时候
用户单击我应该更新的链接,如
“激活”。
所以我有一些问题想知道如果
根据我目前所读到的,我的逻辑是正确的。
2.我的网页服务处理资料及建立户口.
这就是我用一些唯一的salt散列输入密码并将其存储在数据库中的部分。
所以我要一张桌子
user_ID   username         password                 active 
1           taniamm20     12346645556665566666       0例如,我可以在验证链接中使用这个散列密码吗?
http://localhost:9092/localbusscat/services/localbusscat/UpdateDB?choID=12346645556665566666       这是一个很好的练习吗?
或者此时,我不应该保存用户的密码,只应该保存user_id并使用java.UUIID为该用户生成长的唯一密钥,并将其保存在表中并使用这个唯一的键进行验证。
我想我的UpdateDBService应该是这样的
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;
}发布于 2013-03-17 08:21:48
我的建议使用了第二个表,称为pending。
它基本上是用户表的“扩展”,或者主要数据的副本,这取决于您的结构。
这张表,以它最纯净的形式,看起来如下:
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),并可能生成一个新的激活链接,而旧的则被删除。
或者,您可以获取(与每个与激活相关的请求)过期的激活,并删除与其关联的用户数据。
如果在间隔内单击链接,则将删除激活代码并更新用户标志。
另一个选项是扩展用户表:
ActCode, ValidUntil, Userdata这样,您的UserTable将完全排除在选择之外,只有在UserData仍然有效的情况下,才会插入ActCode。这将保护您的AutoIncrement不受非激活帐户的影响,并且您不需要在用户表either...because中设置一个Activated字段,只要它在您的用户表中就被激活了。
发布于 2013-03-17 14:02:33
激活与身份验证是分开的,通常用于确保用户输入他们可以访问的有效电子邮件地址(或任何联系人详细信息)。
您应该生成一个单独的唯一代码来激活用户,并使用该代码而不是密码发送电子邮件链接。
现在我可能错了,但你似乎有这样的印象:哈希密码可以通过电子邮件传输。这不是,在最好的情况下,你是给攻击者一些东西的暴力。
激活后,请用户使用他们的凭据登录。
https://stackoverflow.com/questions/15458793
复制相似问题