【问题标题】:Laravel authentication fails to redirectLaravel 身份验证无法重定向
【发布时间】:2019-09-10 03:20:04
【问题描述】:

我正在尝试创建一个身份验证系统来阻止任何未经登录的访问,但经过身份验证的方法总是加载登录页面。我覆盖了 AuthenticatesUsers 中的所有方法,因为我更改了用户的表名和列,但似乎总是最终加载登录页面。我可以在经过身份验证的方法中返回一个视图,但如果我尝试转到另一个页面,这些会将我重定向到登录页面。

我的数据库

我的登录表单

<html>
<head>
    <meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body>
{{ Form::open(['action' => 'Auth\LoginController@login','methode' => 'POST']) }}
    {{Form::text('login', old('username') ?: old('email'),['class'=>''.$errors->has('email')||$errors->has('username') ? 'is-invalid' : ''.' form-control' ,'placeholder'=>'Nom d\'utilisateur ou email' ,'required', 'autofocus'])}}
    @if ($errors->has('username') || $errors->has('email'))
        <span class="invalid-feedback">
            <strong>{{ $errors->first('username') ?: $errors->first('email') }}</strong>
        </span>
    @endif
        {{Form::password('mot_de_passe', ['class'=>''.$errors->has('password')? 'is-invalid' : ''.' form-control','placeholder'=>'Mot De Passe' , 'required'])}}
        @if ($errors->has('password'))
        <span class="invalid-feedback" role="alert">
            <strong>{{ $errors->first('password') }}</strong>
        </span>
        @endif
        
    <button type="submit" class="btn btn-outline-info btn-block"><i class="ft-unlock"></i>
        {{ __('Login') }}
    </button>
{{ Form::close() }}
</body>
</html>

PagesController

class PagesController extends Controller
{
    protected $redirectTo = '/'; // Redirect after successfull login

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

    public function tableau_bord()
    {
        return view('pages.tableau_bord');
    }
}

在 LoginController 中登录时使用的方法

 class LoginController extends Controller
 {
 protected $redirectTo = '/';

 public function __construct()
 {
    $this->middleware('guest')->except('logout');
    $this->username = $this->findUsername();
 }
 public function findUsername()
 {
 $login = request()->input('login');

 $fieldType = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 
 'nom_utilisateur';

 request()->merge([$fieldType => $login]);
 return $fieldType;
}

public function login(Request $request)
{
    $this->validateLogin($request);
    if ($this->hasTooManyLoginAttempts($request)) {
        $this->fireLockoutEvent($request);
        return $this->sendLockoutResponse($request);
    }

    if ($this->attemptLogin($request)) {
        return $this->sendLoginResponse($request);
    }

    $this->incrementLoginAttempts($request);
    return $this->sendFailedLoginResponse($request);
}

protected function validateLogin(Request $request)
{
    $request->validate([
        $this->username => 'required|string',
        'mot_de_passe' => 'required|string',
    ]);
}

protected function attemptLogin(Request $request)
{
    return $this->guard()->attempt(
        array($this->username => $request->login, 'password' =>
            $request > mot_de_passe)
    );
}

protected function sendLoginResponse(Request $request)
{
    $request->session()->regenerate();
    $this->clearLoginAttempts($request);
    return $this->authenticated($request, $this->guard()->user())
        ?: redirect()->intended($this->redirectPath());
}

protected function authenticated(Request $request, $user)
{
    return redirect()->to($this->redirectPath());
}

public function redirectPath()
{
    if (method_exists($this, 'redirectTo')) {
        return $this->redirectTo();
    }
    return property_exists($this, 'redirectTo') ? $this->redirectTo : '/';
}

public function redirectTo()
{
    return $this->redirectTo;
}

protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
    ]);
}

public function username()
{
    return $this->username;
}

protected function credentials(Request $request)
{
    return $request->only($this->username(), 'mot_de_passe');
}
}

【问题讨论】:

  • 我认为在处理身份验证异常时发生重定向的地方在App\Exceptions\Handler
  • 那么解决方案是什么:/
  • 你好米佐!如果我理解正确,您只需要在用户未登录的情况下拒绝某些路由的访问。您不需要覆盖任何方法。只需使用 laravel 开箱即用的 auth 中间件即可。您可以在路由文件或控制器构造方法上使用它。我认为您可以删除所有已完成的覆盖并以这种方式进行测试。请告诉我它是否有帮助或解释更多,以便我能理解并帮助你:)
  • 嗨,伙计,我重写了方法,因为我更改了用户的表名和列

标签: laravel


【解决方案1】:

如果有人遇到这个问题,我通过将表重命名为用户和数据库中的电子邮件/密码字段和登录表单和 loginController & config/auth.php 来解决... make:auth 命令后基本上回到了舞台,显然 laravel 讨厌更改用户表:(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2016-04-02
    • 2016-05-13
    • 2017-12-24
    • 2022-01-24
    • 1970-01-01
    • 2021-11-27
    • 2016-03-10
    相关资源
    最近更新 更多