注销后无法阻止用户返回管理页面 - Laravel 4

时间:2013-12-31 13:26:30

标签: php authentication laravel laravel-4

我在使用Laravel 4开发一个非常基本的应用程序时遇到了一个奇怪的问题。我已经根据laravel 4用户身份验证文档的文档创建了这些功能,用户可以在其中注册以询问不同的问题和只有注册用户才能访问秘密/管理页面。到目前为止一切运作良好,除了我得到这个奇怪的问题,即使在退出用户后仍然可以访问珍贵的页面或换句话说管理页面。我不确定它与Laravel有什么关系,但我仍然无法弄清楚问题是什么,以及如何阻止或强制浏览器重新加载或者某些东西以便他们可以'即使他们点击浏览器中的后退箭头,也可以看到管理页面。 虽然它可能不是相关的,但我仍然附上我的代码。在routes.php我有这个

<?php

Route::get('/', array('as'=>'home', 'uses'=>'QuestionController@getindex'));
Route::get('register', array('as'=>'register', 'uses'=>'UserController@getnew'));
Route::get('login', array('as'=>'login', 'uses'=>'UserController@getlogin'));
Route::get('logout', array('as'=>'logout', 'uses'=>'UserController@getlogout'));

Route::post('register', array('before'=>'csrf', 'uses'=>'UserController@postcreate'));
Route::post('login', array('before'=>'csrf', 'uses'=>'UserController@postlogin'));

在userController中我有这个

<?php

class UserController extends BaseController {

    public function getNew() {

        return View::make('users.new')
            ->with('title', 'Snappy Q&A - Register');
    }

    public function postCreate() {

        $validator = Member::validate(Input::all());

        if ( $validator->passes() ) {
            $user = User::create( array (
                'username' => Input::get('username'),
                'password' => Hash::make(Input::get('password'))
            ));

            Auth::login($user);

            return Redirect::route('home')->with('message', 'Thanks for registering!');
        } else {

            return Redirect::route('register')->withErrors($validator)->withInput();
        }
    }

    public function getLogin() {

        return View::make('users.login')
            ->with('title', 'Snappy Q&A - Login');
    }

    public function postLogin() {

        $user_creds = array(
            'username' => Input::get('username'),
            'password' => Input::get('password')
        );

        if( Auth::attempt($user_creds) ) {

            return Redirect::route('home')
                ->with('message', 'Yep, you are now logged in');
        } else {

            return Redirect::route('login')
                ->with('message', 'Shit man! The creds are not authorised!')
                ->withInput();
        }
    }

    public function getLogout() {

        if( Auth::check() ) {

            Auth::logout();
            return Redirect::route('login')
                ->with('message', 'You are now logged out!');
        } else {

            return Redirect::route('home');
        }
    }

}

此new.blade.php负责创建新用户

@extends('master.master')

@section('content')

    @if( $errors->has() )
        <p>The following erros has occured: </p>

        <ul class="form-errors">
            {{ $errors->first('username', '<li>:message</li>') }}
            {{ $errors->first('password', '<li>:message</li>') }}
            {{ $errors->first('password_confirmation', '<li>:message</li>') }}
        </ul>
    @endif

    {{ Form::open( array('route'=>'register', 'method'=>'post')) }}

        {{ Form::token() }}

        {{ Form::label('username', 'Username') }}
        {{ Form::text('username', Input::old('username')) }}

        {{ Form::label('password', 'Password') }}
        {{ Form::password('password') }}

        {{ Form::label('password_confirmation', 'Confirm Password') }}
        {{ Form::password('password_confirmation') }}

        {{ Form::submit('Register', array('class'=>'btn btn-success')) }}

    {{ Form::close() }}
@stop

这个用于登录用户:

@extends('master.master')

@section('content')

    {{ Form::open( array('route'=>'login', 'method'=>'post') ) }}

        {{ Form::token() }}

        {{ Form::label('username', 'Username') }}
        {{ Form::text('username', Input::old('username')) }}

        {{ Form::label('password', 'Password') }}
        {{ Form::password('password') }}

        {{ Form::submit('Login', array('class' => 'btn btn-success')) }}

    {{ Form::close() }}

@stop

为了说清楚,除了使用Auth :: check()方法导航的条件外,我对管理页面没有任何特殊之处。确保只有登录用户才能看到注销导航。我将在完成此问题之后创建功能。管理页面视图将位于名为questions的文件夹中。我希望现在有道理。

我该如何处理?请询问您是否还需要我的代码的任何其他实例。而且我相信Laravel世界中的许多新手在开发类似功能时会面临或多或少的相同问题。我希望这是一个很好的问题,并会帮助其他人和我。

1 个答案:

答案 0 :(得分:1)

尝试在路线中使用过滤器

Route::get('/', array('before' => 'auth', function()
{

}));

更多: http://laravel.com/docs/routing#route-filters