密码被保存在PHP会话中,但当重新加载页面时,它会返回到登录表单

jvidinwx  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(92)

我创建了一个控制器和一个视图,其中有一个窗体,您可以在其中输入密码。使用中间件,我想确定此密码有效并保存会话的密码。如果会话中的密码有效,则用户不需要显示表单,而需要显示页面内容。
以下是我的路由、中间件和控制器:
路线:

Route::get('/login', 'login@show')->name('login');
Route::post('/login', 'login@checkPass')->name('check.pass')->middleware(PasswordAuthTask::class);
Route::get('/noaccess', 'login@checkPass')->name('noaccess')->middleware(PasswordAuthTask::class);

中间件:

class PasswordAuthTask
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        $password = $request->input('password');
        $request->session()->put('password', $password);
        $expectedPass = '123';

        if (($password === $expectedPass) || ($password === null || $password === '')) {
            if ($password === $expectedPass) {
                $request->session()->put('password', $password);
            }

            return $next($request);
        } else {
            return redirect('noaccess');
        }
    }
}

控制器:

class login extends Controller
{
    public function show()
    {
        if (Session::has('password') && Session::get('password') === '123') {
            return view('content');
        }

        return view('login');
    }

    public function checkPass(Request $request)
    {
        $password = $request->input('password');
        $expectedPass = '123';
        if (Session::has('password') && $password === $expectedPass) {
            return view('content');
        } else {
            return view('noaccess');
        }
    }
}

即使密码正确并存储在会话中,当重新加载页面时,它也会返回到登录表单。

8yparm6h

8yparm6h1#

通常,这应该起作用。只要中间件被允许终止,会话数据就会被持久化。
看起来像条件句:

if (($password === $expectedPass) || ($password === null || $password === ''))

可能会阻止调用$next。
也许是这样的:

public function handle(Request $request, Closure $next)
    {
        $password = $request->input('password');
        $request->session()->put('password', $password);
        $expectedPass = '123';

        if (($password === $expectedPass) || ($password === null || $password === '')) {
            if ($password === $expectedPass) {
                $request->session()->put('password', $password);
            }
        } else {
            return redirect('noaccess');
        }

        return $next($request);
    }

相关问题