Laravel 5 使用 Angular 查看密码重置
Laravel 5 Password Reset with Angular View
我正在尝试在我的应用程序中使用 Laravel 内置密码重置,其中 Laravel 5.1 作为后端 api 和 Angular 1.3 用于所有前端视图.我已根据 docs 设置了密码重置,我已完成以下操作:
1) 创建 table
php artisan migrate
2) 将此添加到路线中:
Route::post('password/email', 'Auth/PasswordController@postEmail');
Route::post('password/reset', 'Auth/PasswordController@postReset');
因为我将使用 Angular 来显示前端表单,所以我没有添加 GET
的视图。我还没有对 Auth/PasswordController.php
做任何更改,现在它就像它来的方式一样。但是当我从 Postman POST
请求中测试上面的 URL 时,我得到了错误:
View [emails.password] not found.
如何让 Angular 处理视图而不用 Laravel 担心视图?我是否必须拥有 Laravel 查看才能重置内置密码?我该如何处理?
覆盖 postEmail
和 postReset
方法,以便它们 return 一个 JSON 响应(不要让它重定向)。随后 post 到 /password/email
和 /password/reset
从 Angular 通过 xhr.
打开app/Http/Controllers/Auth/PasswordController.php
<?php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
class PasswordController extends Controller
{
use ResetsPasswords;
//add and modify this methods as you wish:
/**
* Send a reset link to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postEmail(Request $request)
{
$this->validate($request, ['email' => 'required|email']);
$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject($this->getEmailSubject());
});
switch ($response) {
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
}
}
/**
* Reset the given user's password.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postReset(Request $request)
{
$this->validate($request, [
'token' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed',
]);
$credentials = $request->only(
'email', 'password', 'password_confirmation', 'token'
);
$response = Password::reset($credentials, function ($user, $password) {
$this->resetPassword($user, $password);
});
switch ($response) {
case Password::PASSWORD_RESET:
return redirect($this->redirectPath());
default:
return redirect()->back()
->withInput($request->only('email'))
->withErrors(['email' => trans($response)]);
}
}
}
检查 app\bootstrap\cache\config.php 中 "view"
部分的视图文件夹路径
'view' =>
array (
'paths' =>
array (
0 => '/home/vagrant/Code/app/resources/views',
),
'compiled' => '/home/vagrant/Code/app/storage/framework/views',
),
此路径必须在服务器上!不像你当地的机器
"D:\WebServers\home\Laravel\app\bootstrap\cache",如果你用宅基地。
并且您必须使用如下命令:"php artisan config:clear | cache" at SERVER!
我遇到了和你一样的问题。如果您有另一个不在 resources/views/emails/password.blade.php.
中的视图,您可以设法更改 config/auth.php
中的视图
因为这个视图不是默认创建的,所以你会收到错误。
我正在尝试在我的应用程序中使用 Laravel 内置密码重置,其中 Laravel 5.1 作为后端 api 和 Angular 1.3 用于所有前端视图.我已根据 docs 设置了密码重置,我已完成以下操作:
1) 创建 table
php artisan migrate
2) 将此添加到路线中:
Route::post('password/email', 'Auth/PasswordController@postEmail');
Route::post('password/reset', 'Auth/PasswordController@postReset');
因为我将使用 Angular 来显示前端表单,所以我没有添加 GET
的视图。我还没有对 Auth/PasswordController.php
做任何更改,现在它就像它来的方式一样。但是当我从 Postman POST
请求中测试上面的 URL 时,我得到了错误:
View [emails.password] not found.
如何让 Angular 处理视图而不用 Laravel 担心视图?我是否必须拥有 Laravel 查看才能重置内置密码?我该如何处理?
覆盖 postEmail
和 postReset
方法,以便它们 return 一个 JSON 响应(不要让它重定向)。随后 post 到 /password/email
和 /password/reset
从 Angular 通过 xhr.
打开app/Http/Controllers/Auth/PasswordController.php
<?php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
class PasswordController extends Controller
{
use ResetsPasswords;
//add and modify this methods as you wish:
/**
* Send a reset link to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postEmail(Request $request)
{
$this->validate($request, ['email' => 'required|email']);
$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject($this->getEmailSubject());
});
switch ($response) {
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
}
}
/**
* Reset the given user's password.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postReset(Request $request)
{
$this->validate($request, [
'token' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed',
]);
$credentials = $request->only(
'email', 'password', 'password_confirmation', 'token'
);
$response = Password::reset($credentials, function ($user, $password) {
$this->resetPassword($user, $password);
});
switch ($response) {
case Password::PASSWORD_RESET:
return redirect($this->redirectPath());
default:
return redirect()->back()
->withInput($request->only('email'))
->withErrors(['email' => trans($response)]);
}
}
}
检查 app\bootstrap\cache\config.php 中 "view"
部分的视图文件夹路径'view' =>
array (
'paths' =>
array (
0 => '/home/vagrant/Code/app/resources/views',
),
'compiled' => '/home/vagrant/Code/app/storage/framework/views',
),
此路径必须在服务器上!不像你当地的机器 "D:\WebServers\home\Laravel\app\bootstrap\cache",如果你用宅基地。 并且您必须使用如下命令:"php artisan config:clear | cache" at SERVER!
我遇到了和你一样的问题。如果您有另一个不在 resources/views/emails/password.blade.php.
中的视图,您可以设法更改config/auth.php
中的视图
因为这个视图不是默认创建的,所以你会收到错误。