Laravel 5.2 Auth Registration页面被阻止

时间:2016-04-12 08:00:07

标签: php laravel authentication laravel-5.2

我正在使用laravel制作一个webapp。我正在使用内置laravel身份验证系统,并自己添加了排名。但是,当您登录时,您无法访问注册页面。这里的事情是,我只希望管理员能够创建新用户。

我的路线:

Route::group(['middleware' => ['web']], function () {
    Route::get('login', ['as' => 'auth.login', 'uses' => 'Auth\AuthController@showLoginForm']);
    Route::post('login', ['as' => 'auth.login', 'uses' => 'Auth\AuthController@login']);
    Route::get('logout', ['as' => 'auth.logout', 'uses' => 'Auth\AuthController@logout']);

// Password Reset Routes...
    Route::get('password/reset/{token?}', ['as' => 'auth.password.reset', 'uses' => 'Auth\PasswordController@showResetForm']);
    Route::post('password/email', ['as' => 'auth.password.email', 'uses' => 'Auth\PasswordController@sendResetLinkEmail']);
    Route::post('password/reset', ['as' => 'auth.password.reset', 'uses' => 'Auth\PasswordController@reset']);

    Route::get('/home', 'HomeController@index');
});

Route::group(['middleware' => ['CheckAdmin']], function () {
    // Registration Routes...
    Route::get('/register', 'Auth\AuthController@showRegistrationForm');
    Route::post('/register', 'Auth\AuthController@register');
});

我的AuthController

<?php

namespace App\Http\Controllers\Auth;

use App\Models\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers;

    protected $redirectTo = '/admin';

    /**
     * Create a new authentication controller instance.
     *
     * @param  \Illuminate\Contracts\Auth\Guard  $auth
     * @param  \Illuminate\Contracts\Auth\Registrar  $registrar
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }

    public function getRegister()
    {
        return redirect('/');
    }

    public function postRegister()
    {
        return redirect('/');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }

    /**
     * Returns either ADMIN or USER based on user's rank
     * Returns false if user is not logged in
     */
    public static function getType()
    {
        if (Auth::check()) {
            return Auth::user()->type;
        }
        else {
            return false;
        }
    }
}

我尝试过很多在线发现的教程,但这些教程都不适合我。有没有人有我的解决方案?提前谢谢!

1 个答案:

答案 0 :(得分:0)

尝试添加以下几项内容:

使用以下命令创建管理中间件:

public function handle($request, Closure $next)
    {
    if ( Auth::check() && Auth::user()->isAdmin() )
    {
        return $next($request);
    }
    return redirect('/home');
}

然后将此行添加到$ routeMiddleware:

下的Kernel.php中
    'admin' => \App\Http\Middleware\Admin::class,

将管理员路线放入:

Route::group(['middleware' => ['auth', 'admin']], function () {
   //here 
});

这是在middleware =&gt; web group

其他路线:

Route::group(['middleware' => 'web'], function () {
   //here
});

将此添加到您拥有的每个控制器:

public function __construct() { $this->middleware('auth'); }