密码重置时避免“自动登录”

时间:2017-10-02 11:54:46

标签: php laravel controller routes

我正在开发一个Laravel项目。我不是原始的开发人员,所以如果我犯了错误,请原谅我并解释它是什么。

在这个项目中,我们有一个模块来请求一个新密码。当表单被提交时,用户被重定向到route('password.request'),我相信,这是隐藏在框架中的某个地方。

问题是当用户获得新密码时,他会自动登录并可以访问这些页面。但他不应该因为他没有管理权。

所以我尝试注销并将用户重定向到主页,没有任何运气。

有人可以解释为什么laravel(或“我”,因为它们是我尚未探索过的项目的某些部分)这样做以及如何解决这个问题?

reset.blade.php(请求新密码的表单)

form class="form-horizontal" role="form" method="POST" action="{{ route('password.request') }}">
    {{ csrf_field() }}

    <input type="hidden" name="token" value="{{ $token }}">
....

我的自定义退出路线:

Route::get('/customLogout', 'Auth\LoginController@customLogout');

resetPasswordController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class ResetPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset requests
    | and uses a simple trait to include this behavior. You're free to
    | explore this trait and override any methods you wish to tweak.
    |
    */

    use ResetsPasswords;

    /**
     * Where to redirect users after resetting their password.
     *
     * @var string
     */
    protected $redirectTo = '/customLogout';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }
}
LoginController.php中的

方法

public function customLogout(){
        //Session::flush();       
        return redirect()->route('/');
            }

2 个答案:

答案 0 :(得分:5)

好的,我(finnaly)找到了一条路。

我重写了名为&#34; resetPassword&#34;的功能。并删除了登录代码。

此功能来自框架(无法记住文件,如果有人可以提供帮助:S) 我重写了ResetPasswordController.php中的函数

protected function resetPassword($user, $password)
    {
        $user->forceFill([
            'password' => bcrypt($password),
            'remember_token' => Str::random(60),
        ])->save();

        //$this->guard()->login($user);
    }

这使我的密码更改并自动重定向到主页面。

编辑:哦,不要忘记将其添加到您的包含中:

use Illuminate\Support\Str;

答案 1 :(得分:0)

转到auth / ResetPasswordController

并重写此方法resetPassword方法,使其像这样

/**
 * Reset the given user's password.
 *
 * @param  \Illuminate\Contracts\Auth\CanResetPassword  $user
 * @param  string  $password
 * @return void
 */
protected function resetPassword($user, $password)
{
    $this->setUserPassword($user, $password);
    $user->save();
    event(new PasswordReset($user));
}

在控制器顶部添加此行以避免出现任何错误

use Illuminate\Auth\Events\PasswordReset;