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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

6586閲覧

laravel パスワードリセットが動かない

mizutama72

総合スコア31

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/09/15 06:52

編集2016/09/16 00:07

laravel初心者です。
パスワードリセットが動かず悩んでおります。

route.phpには、

php

1Route::get('/password/email', 'Auth\PasswordController@getEmail'); 2Route::post('/password/email', 'Auth\PasswordController@postEmail'); 3 4Route::get('/password/reset/{token}', 'Auth\PasswordController@getReset'); 5Route::post('/password/reset', 'Auth\PasswordController@postReset');

と設定しました。

viewは、
views/auth/password.blade.php
views/auth/reset.blade.php
views/emails/password.blade.php
を用意しました。

ですが、emailを入力して送信ボタンをクリックすると、画面が真っ白になります。

過去の投稿を参考にして、
vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.phpの
デバッグをしてみたら、以下の$responseの値がnullでした。
$request->only('email')の値は正しく取得できています。

あとは、どの部分をチェックしたらいいのか、教えてください。
宜しくお願いします。

php

1 $response = Password::sendResetLink($request->only('email'), function (Message $message) { 2 $message->subject($this->getEmailSubject()); 3 });

メールは送信されていません。
エラーログは、htdocs/システム名/storage/logs/laravel.log には、エラーらしきログは出ません。(送信時間にログファイルが更新されません。)
その他、見るべきところはありますでしょうか?
ちなみに

php

1$mailer->send( 2'user.email.confirm', 3['user' => $user, 'token' => $user->confirmation_token], function ($message) use ($user) { $message->to($user->email)->subject('仮登録のお知らせ'); } );

別の機能ですが、上記の場合のメールは送ることができるので、パスワードリセットに限っておかしいような形です。。

formのactionは、

html

1<form class="form-auth" action="/password/email" method="POST">

envは、システム名などがあるので、全部は出せませんが、

php

1APP_ENV=local 2APP_DEBUG=true 3APP_KEY=XXXXXXXXXXXXXXXXXXXXXXXX 4 5DB_HOST=127.0.0.1 6DB_DATABASE=DB7DB_USERNAME=root 8DB_PASSWORD=root 9 10CACHE_DRIVER=file 11SESSION_DRIVER=file 12QUEUE_DRIVER=sync 13 14MAIL_DRIVER=smtp 15MAIL_HOST=お名前サーバー 16MAIL_PORT=587 17MAIL_FROM_ADDRESS=システムのメールアドレス 18MAIL_FROM_NAME=システムのユーザ名 19MAIL_USERNAME=システムのメールアドレス 20MAIL_PASSWORD=パスワード 21MAIL_ENCRYPTION=tls 22

となっています。

以下を試しましたが、

# php artisan tinker Psy Shell v0.4.4 (PHP 5.5.26 — cli) by Justin Hileman >>> Mail::raw('Test Mail', function($message) { $message->to('xxxx@xxxx.jp')->subject('test'); }); => 1

xxxx@xxxx.jp には正常にメールが届きます。

また、以前に別の担当者がマルチユーザ対応?ということで、

php

1Route::post('/admin/password_reset',function(Request $request){ 2 Password::admin()->sendResetLink($request->only('email'), function (Message $message) { 3 $message->subject("Password Reset Link"); 4 }); 5 //ログイン画面に戻る 6 return \Redirect::to("/admin"); 7});

ということをやっていた経緯があります。現在はやっていません。

resetPasswordsに上記のようにやってみると、

php

1 $response = Password::user()->sendResetLink($request->only('email'), function (Message $message) { 2 $message->subject($this->getEmailSubject()); 3 });

php

1SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null 2 3SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null (SQL: insert into `password_resets` (`email`, `token`, `type`, `created_at`) values (, 41ab894a204a827415dcd728ff1a41....

とemailが取れないというエラーになります。
ですが、上記のsendResetLinkの前に、var_dump($request->only('email'))を実行すると、メールアドレスは取得できます。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2016/09/15 16:42

エラーログが見れると良いのですが、メールはおそらく送信されていませんよね??
mizutama72

2016/09/15 23:47

ご回答ありがとうございます! メールは送信されていません。 エラーログは、htdocs/システム名/storage/logs/laravel.log には、エラーらしきログは出ません。(送信時間にログファイルが更新されません。) その他、見るべきところはありますでしょうか? ちなみに $mailer->send( 'user.email.confirm', ['user' => $user, 'token' => $user->confirmation_token], function ($message) use ($user) { $message->to($user->email)->subject('仮登録のお知らせ'); } ); 別の機能ですが、上記の場合のメールは送ることができるので、パスワードリセットに限っておかしいような形です。。
guest

回答2

0

自己解決

自己解決いたしました。
config/auth.phpにmulti-auth'の設定がされていて、複数ユーザが設定されていたのですが、他のユーザと同じようにmodelの設定をしたら、メールが飛ぶようになりました。
お騒がせいたしました。

投稿2016/09/16 01:24

mizutama72

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Laravel APIで実装を調べてみました。
Interface
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Contracts/Auth/PasswordBroker.php

sendResetLinkMail
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Foundation/Auth/ResetsPasswords.php

PasswordBroker
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Auth/Passwords/PasswordBroker.php#L106

responseにnullが返ってくるのはメールがちゃんと送信されていないからのような気がします。
メールのテスト環境が何かわかりませんが、formのactionやらenvファイルやらメールを送信するための環境をチェックしてみては?

投稿2016/09/15 16:54

twin_bird

総合スコア230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問