【问题标题】:Laravel Auth - use md5 instead of the integrated Hash::make()Laravel Auth - 使用 md5 代替集成的 Hash::make()
【发布时间】:2013-11-21 14:23:55
【问题描述】:

所以,我正在为我的网站切换到 laravel。我的旧网站目前拥有大约 500 个用户。每个用户都有一个 md5 哈希作为密码 (duh ^^)。

当我切换到 laravel 时,我希望使用 Auth::attempt 不幸的是,它使用自己的方法来散列密码字符串。我不希望我的所有用户都更改密码,因为我正在切换到 laravel,是否可以让 Auth 类使用 md5 代替,所以我的用户不必切换密码? :)

如果是,谁能告诉我怎么做?

【问题讨论】:

  • 然后您需要创建自己的身份验证器,例如 if($result=DB::table('user')->where('username',Input::get('user'))->where('password', md5(Input::get('password')))) { //successfully log in },尽管像​​ Ronni 所说的最好不要使用 md5 并强制他们更改
  • 看看这里:stackoverflow.com/a/17719586/1661358 虽然答案是针对 SHA1,但它与 MD5 的过程几乎相同。

标签: php laravel laravel-5 hash laravel-4


【解决方案1】:

不要将 md5 用于密码散列。即使是php manual warns 反对它:"Warning It is not recommended to use this function to secure passwords, due to the fast nature of this hashing algorithm."。但在你的情况下,你可以在你的项目中使用下面的 sn-p

    $user = User::where([ 
        'login_id'  => $request->login_id,
        'password'  => md5($request->password)
    ])->first(); 
    
    if ($user) { 
        Auth::login($user); 

        return redirect()->intended('home')->withSuccess('User Signed in');
    }

【讨论】:

    【解决方案2】:

    MD5 已经过时了。我建议你不要试图保留它。 相反,当用户第一次登录时,Auth::attempt 失败时,您应该尝试将他们的密码与数据库进行比较 MD5

    $user = User::where('username', '=', Input::get('username'))->first();
    
    if(isset($user)) {
        if($user->password == md5(Input::get('password'))) { // If their password is still MD5
            $user->password = Hash::make(Input::get('password')); // Convert to new format
            $user->save();
            Auth::login(Input::get('username'));
        }
    }
    

    【讨论】:

    • 谢谢,我试试看,然后回来:)
    • 怎么强调都不为过:不要使用 md5。 This article 有很好的信息说明原因。
    • 好吧,使用新系统,我会强制用户在登录时再次输入密码,这样我就可以将他们的密码哈希更改为 laravel 使用的密码。不过我很高兴我学会了这个^^谢谢
    • 阅读文章,使用 bcrypt 很有意义,谢谢! :D
    猜你喜欢
    • 2014-08-31
    • 2018-01-27
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多