3

laravel auth::attemptパスワード フィールドがハッシュされていると仮定するのではなく、平文で格納されていることをどのように伝えますか?

Guard.php 内

public function attempt(array $credentials = array(), $remember = false, $login = true)
{
    $this->fireAttemptEvent($credentials, $remember, $login);

    $user = $this->provider->retrieveByCredentials($credentials);

    // If an implementation of UserInterface was returned, we'll ask the provider
    // to validate the user against the given credentials, and if they are in
    // fact valid we'll log the users into the application and return true.
    if ($user instanceof UserInterface)
    {
        if ($this->provider->validateCredentials($user, $credentials))
        {
            if ($login) $this->login($user, $remember);

            return true;
        }
    }

    return false;
}

1 つはプレーンテキストで、もう 1 つは password_secured です。

後者を試した場合、パスワード列名がpassword_secured.

Cuz 私はこれを試しましたが、エラーが発生しましUndefined index: passwordた。

    $user = array(
        'user_id'           => Input::get('username'),
        'password_secured'  => Input::get('password'),
        'checklogin'        => 0,
    );

    if (Auth::attempt($user)) {
        return 'login success';
    }

問題は、ゼロから構築するのではなく、アプリケーションを移植していることです。別のアプリケーションがDBを使用しており(ライブであり)、プレーンテキストでパスワードを読み取るようにコーディングされているため、パスワードをプレーンテキストで保存する必要があります。

4

1 に答える 1

4

スクリプトを実行してすべてのパスワードをハッシュすることを検討してください。データベースの内容が漏洩した瞬間にこれらのパスワードはすぐに失われるため、プレーンテキストでの保存は強制されたり、考慮されたりすることはありません (システムを継承したとしても)。ハッキングが発生します。標準に従ってデータを扱っていないことを顧客が発見した場合の訴訟を想像してみてください....

さて、この警告に耳を傾けたくない場合、それを行う方法はかなりハックですが、機能します。ソースGuardから見た( を探す) には、 を実装するオブジェクトが与えられます。__constructUserProviderInterface

適切なオブジェクトがたくさんあります。必要なものを選択して拡張します。を少しお楽しみDatabaseUserProviderいただけますが、この拡張メソッドは便利で、すべての拡張メソッドで実行できます。

拡張するメソッドはpublic function validateCredentials(UserInterface $user, array $credentials). 次のように:

namespace Illuminate\Auth;
class MyUserInterface extends DatabaseUserProvider {
    public function validateCredentials(UserInterface $user, array $credentials) {
        $plain = $credentials['password'];
        return ($plain === $user->getAuthPassword());
    }
}

as MyUserInterfaceextendsDatabaseUserProvider自体が提供する はUserProviderInterface、プロバイダーとしてMyUserInterface依存性注入可能になりました。Guard作業の半分が完了しました。次のステップは、実際に Guard にロードするよう指示することです。私は Laravel4 がGuard実装をロードする方法に精通していませんが、構成のどこかで、MyUserInterface選択した Guard インターフェースとして設定できるようになります。これ以上具体的に言うことはできません。

ところで、このクラスは の他のインターフェース実装と同じ場所にある必要がありますAuth

于 2013-05-28T14:17:07.960 に答える