Angularjs Laravel:重置密码而不获得重定向响应
我正在构建一个angular应用程序,希望实现密码重置。但是,默认的laravel配置似乎不允许使用纯粹的XMLHttpRequest($http.post)请求来执行此操作,并使用302重定向进行响应 通过在authController类中实现上述方法并返回json响应,我成功地使postLogin和postRegister工作,而无需发出重定向,这样做会覆盖上述方法的默认laravel实现。postmail没有这样的运气,而且它似乎根本没有命中该方法,我只是立即得到302回复 理想情况下,除了检查他们的电子邮件,我根本不希望用户离开单页应用程序。 所以1。用户将电子邮件发送到postEmail->带有重置链接的电子邮件或更好的电子邮件“重置代码”发送到电子邮件地址->用户然后将重置令牌代码输入到已打开的web应用程序中,或者如果无法完成,则浏览到在新选项卡中打开的重置密码页面 我尝试实现postEmail方法,如下所示:Angularjs Laravel:重置密码而不获得重定向响应,angularjs,laravel,laravel-5,Angularjs,Laravel,Laravel 5,我正在构建一个angular应用程序,希望实现密码重置。但是,默认的laravel配置似乎不允许使用纯粹的XMLHttpRequest($http.post)请求来执行此操作,并使用302重定向进行响应 通过在authController类中实现上述方法并返回json响应,我成功地使postLogin和postRegister工作,而无需发出重定向,这样做会覆盖上述方法的默认laravel实现。postmail没有这样的运气,而且它似乎根本没有命中该方法,我只是立即得到302回复 理想情况下,除
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 response()->json(['msg' => 'A reset link has been sent to your E-mail'], 200);
case Password::INVALID_USER:
return response()->json(['msg' => 'This E-mail cannot be found in our system'], 200);
}
}
另外,带有laravel发出的重置链接的电子邮件的模板在哪里?您可以在
App\Http\Controllers\Auth
命名空间中创建密码控制器,以扩展密码重置方法
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Foundation\Auth\ResetsPasswords;
class PasswordController extends Controller
{
use ResetsPasswords;
public function postEmail(Request $request)
{
}
}
您可以在App\Http\Controllers\Auth
命名空间中创建PasswordController来扩展密码重置方法
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Foundation\Auth\ResetsPasswords;
class PasswordController extends Controller
{
use ResetsPasswords;
public function postEmail(Request $request)
{
}
}
虽然接受的答案完全无效,但不覆盖原始通知类的另一个解决方案如下,ResetPassword
提供了一个名为createUrlUsing
的静态方法,该方法接受闭包
,因此我们可以覆盖URL,如下所示:
使用light\Support\Facades\Password;
使用Illumb\Auth\Notifications\ResetPassword;
...
$status=密码::sendResetLink(
['email'=>$args['email']],
函数($user,$token){
ResetPassword::createUrlUsing(函数($notifiable,$token){
//这是覆盖URL的地方,您还可以查看
//Laravel和skip中的'url'、'action'和'route'函数
//‘sprintf’。
回程冲刺(
%s/%s/?令牌=%s&电子邮件=%s“,
config('your.optional.frontend_url'),
config('your.optional.password\u reset'),
$token,
$notifiable->getEmailForPasswordReset(),
);//前端\u url/密码\u url/?令牌=令牌&电子邮件=电子邮件
});
返回$user->notify(新重置密码($token));
}
);
//这是处理最终响应的可选方法,您可以将其转换为
//JSON甚至可以忽略它。
返回$status==密码::重置链接\u已发送
? ['status'=>\uuuu($status)]
:抛出新错误(_($status));
这段代码应该放在一个新的路径上,以处理密码重置请求,而不是使用默认的Laravel路径。当接受的答案完全无效时,另一个不覆盖原始通知类的解决方案如下:,ResetPassword
提供了一个名为createUrlUsing
的静态方法,该方法接受一个闭包
,因此我们可以覆盖URL,如下所示:
使用light\Support\Facades\Password;
使用Illumb\Auth\Notifications\ResetPassword;
...
$status=密码::sendResetLink(
['email'=>$args['email']],
函数($user,$token){
ResetPassword::createUrlUsing(函数($notifiable,$token){
//这是覆盖URL的地方,您还可以查看
//Laravel和skip中的'url'、'action'和'route'函数
//‘sprintf’。
回程冲刺(
%s/%s/?令牌=%s&电子邮件=%s“,
config('your.optional.frontend_url'),
config('your.optional.password\u reset'),
$token,
$notifiable->getEmailForPasswordReset(),
);//前端\u url/密码\u url/?令牌=令牌&电子邮件=电子邮件
});
返回$user->notify(新重置密码($token));
}
);
//这是处理最终响应的可选方法,您可以将其转换为
//JSON甚至可以忽略它。
返回$status==密码::重置链接\u已发送
? ['status'=>\uuuu($status)]
:抛出新错误(_($status));
这段代码应该放在一个新路径上,以处理密码重置请求,而不是使用默认的Laravel路径。您需要创建一个PasswordController
来扩展postmail()
方法。您需要创建一个PasswordController
来扩展postmail()
方法。