【问题标题】:laravel redirectTo not working for custom controllerlaravel redirectTo 不适用于自定义控制器
【发布时间】:2020-04-27 07:37:09
【问题描述】:

我是 Laravel 的新手。注册后想在我的自定义控制器中使用 redirectTo 属性。注册工作正常,但重定向不起作用

我的自定义控制器

namespace App\Http\Controllers\Auth\Login;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Auth\LoginController as DefaultLoginController;
use App\Employee;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
class EmployeeController extends Controller
{
    protected $redirectTo = RouteServiceProvider::HOME;

    public function __construct()
    {
        $this->middleware('guest:employee')->except('logout');
    }

    protected function guard()
    {
        return Auth::guard('employee');
    }
    public function register()
    {
        return Employee::create(['employee_id'=>12, 'employee_password'=>2]);
}
}

我在我的 config/Auth.php 中添加了提供程序

<?php

return [


    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
        'passwords' => 'employee',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'employee',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'employee',
            'hash' => false,
        ],
        'employee' => [
            'redirectTo' => 'employee.home',
            'driver' => 'session',
            'provider' => 'employee',
           ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'employee' => [
            'driver' => 'eloquent',
            'model' => App\Employee::class,
           ],
    ],



    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
        'employee' => [
            'provider' => 'employee',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

    'password_timeout' => 10800,

];

还有我在 app 文件夹中的 Employee 类

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

use Illuminate\Database\Eloquent\Model;

class Employee extends Authenticatable
{
    use Notifiable;

    protected $fillable = ['employee_id', 'employee_password'];

];

    protected $hidden = [
        'password', 'remember_token',
    ];

    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public $timestamps = false;

}

我的 RedirectIfAuthenticated 中间件

<?php
namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect(RouteServiceProvider::HOME);
        }

        return $next($request);
    }
}

仍然重定向不起作用。我错过了什么?让我知道我是否缺少任何要显示的代码

【问题讨论】:

  • 你能分享你的RedirectIfAuthenticated中间件吗?这是您应该放置逻辑的地方:switch($guard){...}
  • 当然,我上过这门课,请指教

标签: php laravel redirect


【解决方案1】:

你可以使用

if(Employee::create(['employee_id'=>12, 'employee_password'=>2]))
   return redirect()->back();

【讨论】:

  • 逻辑很好,工作正常。但我仍然想了解默认身份验证是如何在后面工作的
  • 这仅适用于注册,不适用于登录
【解决方案2】:

您可以直接从RedirectIfAuthenticated 中间件处理重定向,如下所示:

    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            if($guard)
                 return redirect()->route(config('auth.guards.' . $guard . '.redirectTo'));
            return redirect(RouteServiceProvider::HOME);
        }

        return $next($request);
    }

同时,从您的自定义控制器中删除 protected $redirectTo = RouteServiceProvider::HOME;

【讨论】:

  • 不工作......即使我清除配置缓存并重新启动
  • 作为员工测试重定向时,您能否在中间件中dd($guard);
  • 甚至尝试过 dd(Auth::guard($guard)->check());注册后显示为假
  • 奇怪,dd(config('auth.' . $guard . '.redirectTo'))是什么意思
  • config/auth.php 提供程序或保护键/值是否存在任何问题
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2016-04-07
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多