我在尝试重置密码时遇到这个问题,在我的路由/网络中设置区域设置如下:
路线/网页
Route::get('/', function () {
return redirect(app()->getLocale());
});
Route::group( [ 'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}'], 'middleware' => 'locale' ], function () {
Route::get('/', function () {
return view('welcome');
})->name('welcome');
// Auth::routes(['reset' => false]);
Auth::routes(['except' => 'reset']);
Route::get('/home', 'HomeController@index')->name('home');
// register
Route::post('register/', 'Auth\RegisterController@showRegistrationForm')->name('registerplan');
Route::post('register/create', 'Auth\RegisterController@register')->name('register');
});
正如您所看到的,我有一个前缀,我必须在所有链接上设置,我有一个中间件区域设置,其中我将区域设置前缀设置为默认值,以避免每次在每个链接中设置区域设置
区域设置中间件
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class Locale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
app()->setLocale($request->segment(1));
URL::defaults(['locale' => $request->segment(1)]);
return $next($request);
}
}
到目前为止还不错,现在问题来了,当我试图重置一个用户密码;单击重置链接后(示例:https://cubik.app//en/password/reset/72216cd4f35fce0bf2aee9c2e09ffe16cae3a26175c752cb987df59e0312d60d?email=example@demo.com)在从laravel应用程序发送的电子邮件上,并填写重置密码表单,得到此密码重置令牌无效的错误信息。
我所尝试的
我测试将auth路由移动到路由/web文件中的前缀组之外,并且重置工作正常,因此...
我的结论
可能忘记密码控制器是获得的语言环境,而不是令牌,但我不知道如何修复它。
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
use SendsPasswordResetEmails;
}
提前感谢dev家人的帮助!
##ResetPassword.php ###Chnanged URL {locale}##
$locale=app()->getLocale();
return (new MailMessage)
->subject(Lang::get('Reset Password Notification'))
->line(Lang::get('You are receiving this email because we received a password reset request for your account.'))
// ->action(Lang::get('Reset Password'), $url)
->action('Reset Password', url($locale . '/password/reset', $this->token))
->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')]))
->line(Lang::get('If you did not request a password reset, no further action is required.'));
}
##############ResetPasswordController ##
##Add this code in ResetPasswordController ##
public function showResetForm(Request $request, $token = null)
{
$token = $request->token;
return view('auth.passwords.reset')->with(
['token' => $token, 'email' => $request->email]
);
}
对于一个多语言项目,我采用了类似的方法。
问题是,令牌现在由{locale}
前缀设置,这导致了无效令牌问题。
要修复它,您需要覆盖/Http/Controller/Auth/ResetPasswordController.php
控制器中的/Illumate/Foundation/Auth/ResetsPasswords.php
函数,以:
public function showResetForm(Request $request, $token = null)
{
$token = $request->token;
return view('auth.passwords.reset')->with(
['token' => $token, 'email' => $request->email]
);
}
这将修复尝试重置用户密码时的无效令牌问题。
我写的是MVC5,使用的是Identity 2.0。 我在邮件中点击链接,我正在获得密码重置令牌并使用 结果总是false,并表示“无效令牌”。我该在哪里修?
我有两台服务器使用相同的ASP。NET核心标识后端。我使用以下命令生成密码重置令牌: 我通过电子邮件链接发送此令牌。当用户单击链接时,他们会被带到一个单独的站点,该站点应提供一个用户界面来更改密码。以下代码处理用户提交令牌及其新密码的密码: 在第二台服务器上,标识结果总是返回false,因为“无效令牌”。 通过查看源代码,我看到令牌是使用IP地址生成的(因此我理解令牌验证失败的原因)。 我的问题是
我有一个生成密码重置令牌的Webapi服务。 令牌生成服务endpoint:
如何覆盖令牌消息“此密码重置令牌无效。” 我尝试将此添加到ResetPasswordController中,但它仍然显示默认的令牌消息。 我需要添加一个URL而不是仅仅改变文本。覆盖“密码重置令牌无效”的错误文本Laravel 我发现实际验证令牌的是$this->broker()->reset()。完全覆盖此方法是否是覆盖令牌消息的唯一方法?
我在我的注解里有。yaml使用注释管线设置的以下设置: 我这里的问题是,我可以创建一个像是否不带区域设置前缀? 这是保护区,我可以使用用户语言。我尝试使用这个symfony路由文档,但我希望保留注释。 目前它看起来像,但我希望。