我在github上关注了Confide的Zizaco教程,看起来我在登录后进入管理页面时已经完成了所有操作。问题是当我刷新页面时它会重定向回登录页面。我错过了什么或这是一个错误吗?我认为这可能是我路由的方式,但似乎无法解决这个问题,因为我是Confide的新手。
routes.php文件
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/
// Dashboard route
Route::get('/admin', function(){
return View::make('site.pages.admin.index');
});
// Only authenticated users will be able to access routes that begins with
// 'admin'. Ex: 'admin/posts', 'admin/categories'.
Route::when('admin*', 'auth');
//
// Confide routes
Route::get('users/create', 'UsersController@create');
Route::post('users', 'UsersController@store');
Route::get('users/login', 'UsersController@login');
Route::post('users/login', 'UsersController@doLogin');
Route::get('users/confirm/{code}', 'UsersController@confirm');
Route::get('users/forgot_password', 'UsersController@forgotPassword');
Route::post('users/forgot_password', 'UsersController@doForgotPassword');
Route::get('users/reset_password/{token}', 'UsersController@resetPassword');
Route::post('users/reset_password', 'UsersController@doResetPassword');
Route::get('users/logout', 'UsersController@logout');
filters.php
<?php
/*
|--------------------------------------------------------------------------
| Application & Route Filters
|--------------------------------------------------------------------------
|
| Below you will find the "before" and "after" events for the application
| which may be used to do any work before or after a request into your
| application. Here you may also register your custom route filters.
|
*/
App::before(function($request)
{
//
});
App::after(function($request, $response)
{
//
});
/*
|--------------------------------------------------------------------------
| Authentication Filters
|--------------------------------------------------------------------------
|
| The following filters are used to verify that the user of the current
| session is logged into this application. The "basic" filter easily
| integrates HTTP Basic authentication for quick, simple checking.
|
*/
Route::filter('auth', function () {
// If the user is not logged in
if (Auth::guest()) {
return Redirect::guest('users/login');
}
});
// Only authenticated users will be able to access routes that begins with
// 'admin'. Ex: 'admin/posts', 'admin/categories'.
Route::when('/admin', 'auth');
Route::filter('auth.basic', function()
{
return Auth::basic();
});
/*
|--------------------------------------------------------------------------
| Guest Filter
|--------------------------------------------------------------------------
|
| The "guest" filter is the counterpart of the authentication filters as
| it simply checks that the current user is not logged in. A redirect
| response will be issued if they are, which you may freely change.
|
*/
Route::filter('guest', function()
{
if (Auth::check()) return Redirect::to('/');
});
/*
|--------------------------------------------------------------------------
| CSRF Protection Filter
|--------------------------------------------------------------------------
|
| The CSRF filter is responsible for protecting your application against
| cross-site request forgery attacks. If this special token in a user
| session does not match the one given in this request, we'll bail.
|
*/
Route::filter('csrf', function()
{
if (Session::token() !== Input::get('_token'))
{
throw new Illuminate\Session\TokenMismatchException;
}
});
UserController.php
<?php
/**
* UsersController Class
*
* Implements actions regarding user management
*/
class UsersController extends Controller
{
/**
* Displays the form for account creation
*
* @return Illuminate\Http\Response
*/
public function create()
{
return View::make('users.signup');
}
/**
* Stores new account
*
* @return Illuminate\Http\Response
*/
public function store()
{
$repo = App::make('UserRepository');
$user = $repo->signup(Input::all());
if ($user->id) {
if (Config::get('confide::signup_email')) {
Mail::queueOn(
Config::get('confide::email_queue'),
Config::get('confide::email_account_confirmation'),
compact('user'),
function ($message) use ($user) {
$message
->to($user->email, $user->username)
->subject(Lang::get('confide::confide.email.account_confirmation.subject'));
}
);
}
return Redirect::action('UsersController@login')
->with('notice', Lang::get('confide::confide.alerts.account_created'));
} else {
$error = $user->errors()->all(':message');
return Redirect::action('UsersController@create')
->withInput(Input::except('password'))
->with('error', $error);
}
}
/**
* Displays the login form
*
* @return Illuminate\Http\Response
*/
public function login()
{
if (Confide::user()) {
return Redirect::to('/admin');
} else {
return View::make(Config::get('confide::login_form'));
}
}
/**
* Attempt to do login
*
* @return Illuminate\Http\Response
*/
public function doLogin()
{
$repo = App::make('UserRepository');
$input = Input::all();
if ($repo->login($input)) {
return Redirect::intended('/admin');
} else {
if ($repo->isThrottled($input)) {
$err_msg = Lang::get('confide::confide.alerts.too_many_attempts');
} elseif ($repo->existsButNotConfirmed($input)) {
$err_msg = Lang::get('confide::confide.alerts.not_confirmed');
} else {
$err_msg = Lang::get('confide::confide.alerts.wrong_credentials');
}
return Redirect::action('UsersController@login')
->withInput(Input::except('password'))
->with('error', $err_msg);
}
}
/**
* Attempt to confirm account with code
*
* @param string $code
*
* @return Illuminate\Http\Response
*/
public function confirm($code)
{
if (Confide::confirm($code)) {
$notice_msg = Lang::get('confide::confide.alerts.confirmation');
return Redirect::action('UsersController@login')
->with('notice', $notice_msg);
} else {
$error_msg = Lang::get('confide::confide.alerts.wrong_confirmation');
return Redirect::action('UsersController@login')
->with('error', $error_msg);
}
}
/**
* Displays the forgot password form
*
* @return Illuminate\Http\Response
*/
public function forgotPassword()
{
return View::make(Config::get('confide::forgot_password_form'));
}
/**
* Attempt to send change password link to the given email
*
* @return Illuminate\Http\Response
*/
public function doForgotPassword()
{
if (Confide::forgotPassword(Input::get('email'))) {
$notice_msg = Lang::get('confide::confide.alerts.password_forgot');
return Redirect::action('UsersController@login')
->with('notice', $notice_msg);
} else {
$error_msg = Lang::get('confide::confide.alerts.wrong_password_forgot');
return Redirect::action('UsersController@doForgotPassword')
->withInput()
->with('error', $error_msg);
}
}
/**
* Shows the change password form with the given token
*
* @param string $token
*
* @return Illuminate\Http\Response
*/
public function resetPassword($token)
{
return View::make(Config::get('confide::reset_password_form'))
->with('token', $token);
}
/**
* Attempt change password of the user
*
* @return Illuminate\Http\Response
*/
public function doResetPassword()
{
$repo = App::make('UserRepository');
$input = array(
'token' =>Input::get('token'),
'password' =>Input::get('password'),
'password_confirmation' =>Input::get('password_confirmation'),
);
// By passing an array with the token, password and confirmation
if ($repo->resetPassword($input)) {
$notice_msg = Lang::get('confide::confide.alerts.password_reset');
return Redirect::action('UsersController@login')
->with('notice', $notice_msg);
} else {
$error_msg = Lang::get('confide::confide.alerts.wrong_password_reset');
return Redirect::action('UsersController@resetPassword', array('token'=>$input['token']))
->withInput()
->with('error', $error_msg);
}
}
/**
* Log the user out of the application.
*
* @return Illuminate\Http\Response
*/
public function logout()
{
Confide::logout();
return Redirect::to('/');
}
}