Laravel 重定向循环

3

我找不到我的拼图。当我加载页面时,Chrome浏览器会显示:本地主机页面无法正常工作,本地主机重定向次数太多。我猜这是在创建一个循环。我可能做错了什么,但我还没有找出来。下面是我的代码。

   //route
 Route::get('admin/login', 'Auth\AuthController@getlogin');
    Route::post('admin/login', 'Auth\AuthController@postLogin');
    Route::get('admin/logout', 'Auth\AuthController@getLogout');

    Route::group(['middleware' => 'auth'], function () {
        Route::Auth();
        Route::get('/admin', 'admin\HomeController@index');
    });


    Route::get('/', 'guest\HomeController@index');//access all

认证控制器

<?php

namespace App\Http\Controllers\Auth;

use App\Models\Admin;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Response;

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;
    protected $redirectTo = '/admin';

    public function __construct() {

        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    }

    protected function postLogin(Request $request){
        $email = $request['email'];
        $pass = $request['password'];//Hash::make(Input::get('password'));
        $user = Admin::where(['email' => $email])->first();
        if($user && $user->password == $pass) {
            Auth::login($user);
            dd(Auth::user()->toArray());
            return redirect()->intended('/admin');
        }
        else {
            $error = "Invalid username or password";
            return view("admin/login")->with("error", $error);
        }
    }
    protected function getLogout()  {
        Auth::logout();
        return redirect()->intended('admin/login');
    }
}

模型

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable; 


class Admin extends Model implements Authenticatable
{

    use \Illuminate\Auth\Authenticatable;
    protected $table = 'admins';
    public $timestamps = false;
    public $remember_token = null;

}

Authenticate.php

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
class Authenticate
{

    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('admin/login');
            }
        }
        return $next($request);
    }
}

config/auth.php

//---------------before-------------------
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
//----------------after editing--------------------------
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],

1
你的系统只处理管理员作为用户吗?如果不是,那么你将需要创建一个自定义中间件来重定向,如果不是管理员。 - Hari Harker
有三种或更多类型的用户,我如何创建自定义中间件?@HariHarker - Masum billah
请按照此问题答案中提到的步骤进行操作 - https://dev59.com/3lsW5IYBdhLWcg3wwZfG - Hari Harker
1个回答

2

您的认证路由不应该使用认证中间件。因此:

Route::Auth();    

Route::group(['middleware' => 'auth'], function () {
    Route::get('/admin', 'admin\HomeController@index');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接