简体   繁体   中英

Password Protect a Page after login Laravel

After a user registers and logs in, I have an unlisted page/secret page that I need to protect with another password.

I'm trying to get spatie/laravel-littlegatekeeper to help me do this, but running into issues getting it working.

What I'm doing:

littlegatekeeper.config:

<?php

return [
    // Login credentials
    'username' => env('GATEKEEPER_USERNAME', 'default_username'),
    'password' => env('GATEKEEPER_PASSWORD', 'default_password'),

    // The key as which the littlegatekeeper session is stored
    'sessionKey' => 'littlegatekeeper.loggedin',

    // The route to which the middleware redirects if a user isn't authenticated
    // 'authRoute' => url('login'),
];

Routes:

Route::get('/secretapage', ['middleware' => 'littlegatekeeper', function () {
    return view('dir.secretapage.index');
}]);

Route::get('/secretapage/login', function () {
    return view('dir.secretapage.login');
});

Route::post('/secretapage/login/addCredentials', 'SecretController@addCredentials')->name('addCredentials');

SecretController:

After I log in my user. I then try to access the URL /secretpage I get redirected back to the homepage rather the /secretpage/login

    public function index(Request $request)
    {
        $auth = resolve('littlegatekeeper');

        if($auth->isAuthenticated())
        {
            return view('dir.secretpage.index');
        } 

        return view('dir.secretpage.login');

    }

///// FOR LOGING IN

        public function addCredentials(Request $request)
    {

        $auth = resolve('littlegatekeeper');

        $loginSuccess = $auth->attempt($request->only([
            'username',
            'password'
        ]));

        if ($loginSuccess) {
            return redirect('/secretapage')->with('success', 'Thank You for authorizing. Please proceed.');
        }
        else{
            return back()->with('error', 'You entered the wrong credentials');
        }

    }

Blade login file:

<form method="POST" action="{{ route('addCredentials') }}">
...
</form>

If I access secretpage/login 1st, I'm able to add the username and password. Then I can get into /secretpage with no issues....

But I really need to have the users go to /secretpage 1st then if not logged in with the secret username/pass get redirected to /secretpage/login.

I found some help on Laracasts and this ended up working.

Change the authRoute in the littlegatekeeper config file to the following

'authRoute' => '/secretpage/login',

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM