質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Laravel

    692questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

laravelでのパスワード再設定方法

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 3,139

koshibanbi

score 8

ログイン中のユーザーがパスワードを再設定したい時にうまくいかないので質問です。

下記のようなフォームでパスワードを再設定させようとしています。

<form action="{{ url('passwordSetting') }}" method="post">
<label for="password">現在のパスワード
<input type="password" name="password" class="formBar" placeholder="password"/>
</label>

    <p class="textCenter">パスワードの再設定</p>

<label for="password">新しいパスワード(6文字以上、英数記号のみ)
<input type="password" name="passwordNew" class="formBar" placeholder="password"/>
</label>

<label for="password">新しいパスワード(再確認)
<input type="password" name="passwordConfirm" class="formBar" placeholder="password"/>
</label>

<button style="width:100%" type="submit" class="button button-flat-primary button-block button-rounded button-large">更新する</button>

受けるコントローラーは
routes.php
Route::post('/passwordSetting' , 'UserEditModeController@passwordSettingExec');

として
/controllers/UserEditModeController.php
    public function passwordSettingExec()
    {
        //ログインユーザーの情報を取得
        $userInfo = Auth::user();
        $userUniqId = $userInfo->userUniqId;

        //現在のユーザーパスワードをDBから取得
        $hashedPassword = $userInfo->password;
        $password = Input::get('password');

        //入力された現在パスワードとDBのパスワードが合致しているかチェック
        if (Hash::check($password, $hashedPassword))
        {
        // パスワード一致したら。。。
        // 新しいパスワードの2つがあっているかチェックして
            if( Input::get('passwordNew') == Input::get('passwordConfirm'))
            {
               //合っていれば新しいパスワードをHashしてDBに格納
                $encrypted = Hash::make('passwordNew');
                users::where('userUniqid', '=', $userUniqId)
                ->update(array(
                    'password' => $encrypted
                    )
                );
            }

        } else {
            return Response::make('not mach password');
        }

    }

としています。
このコントローラーの処理はうまくいくのですが、その後新しいパスワードでログインができない。。
laravelの場合、パスワードの再設定には何かやり方があるのでしょうか?

よろしくお願いいたします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

passwordNewって文字列ハッシュして登録してないですかこれ?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/19 11:24

    ご返信、ありがとうございます。
    最初のユーザー作成にHash化して登録していたので、再登録の際もHash化が
    必要かと思っていたのですが、ハッシュ化は必要ないのでしょうか?

    キャンセル

  • 2014/11/19 11:56

    Hash::make('passwordNew')
    ではなく
    Hash::make(Input::get('passwordNew'))
    みたいにしてやらないと駄目かなと思います。
    引数の文字をそのままpassword_hash掛けてるんで。
    https://github.com/laravel/framework/blob/4.2/src/Illuminate/Hashing/BcryptHasher.php

    キャンセル

  • 2014/11/19 12:17

    passwordNew
    を新しいパスワードとして登録してしまっている感じですね。

    キャンセル

  • 2014/11/19 18:46

    >kinme 様

    ありがとうございます。
    ご指摘の通り'passwordNew'という文字列そのものをハッシュしてました。。
    Hash::make(Input::get('passwordNew'))
    このようにしたらうまくいきました。
    ありがとうございました!

    キャンセル

0

なるほど! なんともおマヌケなところですが、全く気が付きませんでした。。
ありがとうございます。ちょっと試してみます。。またご報告します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/19 15:09

    入力した新しいパスワードのハッシュを手動で算出して、実際に登録されているハッシュを見比べれば気づけたかもしれませんね。

    キャンセル

0

>>TaMaMhyu様

ですね。チェック不足です。。
Laravelの公式に
$password = Hash::make('secret');
って書いてあったので、Hash::makeは自動的にInput::get()を
持ってきてくれるのだと思い込んでました。。

ありがとうございました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/11/20 09:02

    ユーティリティ的なもののような感じですよね。だからそのような例示なのではないかと。
    使いはじめる前にリファレンスはよく読んだほうがいいです。
    一般的にパスワード系の例でsecretといえば生パスワードだと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Laravel

    692questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。