Php Laravel创建重新激活按钮错误

Php Laravel创建重新激活按钮错误,php,laravel,middleware,Php,Laravel,Middleware,我想创建一个重新激活帐户选项,以便用户在停用帐户后,可以始终单击“重新激活”并返回 现在的问题是,当我点击应该调用控制器函数的链接时,它不工作,无论我做什么,它都会返回到/auth页面 下面是我的中间件: public function handle($request, Closure $next) { if (!Auth::check()) { if ($request->ajax()) { return response('Unautho

我想创建一个重新激活帐户选项,以便用户在停用帐户后,可以始终单击“重新激活”并返回

现在的问题是,当我点击应该调用控制器函数的链接时,它不工作,无论我做什么,它都会返回到
/auth
页面

下面是我的中间件:

public function handle($request, Closure $next)
{
    if (!Auth::check()) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('/');
        }
    }
    else
    {
        $user = Auth::user();
        if (!$user->activated) {
            $activation = action('Auth\AuthController@getActivationMail', ['username' => $user->username]);
            Auth::logout();

            return redirect()->guest('auth')
                ->withErrors(array('message' => 'Please activate your account. Re-send your activation by clicking <a href=' . $activation . '>here</a>.'));
        }



         // the main code starts here

        else if (!$user->enabled) {
            $reactivation = action('UserController@postActivateUser');
            Auth::logout();
            //$reactivation = $user->enabled = 1;
            //$user->save();
            return redirect('/auth')->withErrors(array('message' => 'Your account has been deactivated. You can reactivate your account by clicking <a href='. $reactivation .'> Here </a>.'))->withInput();
        }

        $user->runDailyNotifications();
    }
    return $next($request);
}
因此,我创建了一个类似的:

public function postActivateUser(Request $request)
{
    $user = Auth::user();
    $user->enabled = 1;
    $user->save();

    return response()->json(['result' => true, 'msg' => 'Your account has been activated.']);
}
路线:

Route::get('auth/activate', 'UserController@postActivateUser');

我不知道我能做些什么才能使它正确,谢谢所有帮助我的人。

你在运行什么Laravel版本? 您的中间件要求用户必须登录才能激活其帐户,否则会重定向到auth屏幕

if (!Auth::check()) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('/');
        }
    }
您应该从中间件中排除激活路由,并使用激活令牌来识别未经身份验证的用户并重新激活其帐户

将这一行放在路由文件中auth中间件的外部

Route::get('auth/activate', 'UserController@postActivateUser');
然后使用postActivateUser方法,您应该根据激活url和User::findByToken根据您的数据库字段更改请求->令牌参数名称

public function postActivateUser(Request $request)
{
    // get the user from activation token

    $user = User::findByToken($request->token);
    $user->enabled = 1;
    $user->save();

    return response()->json(['result' => true, 'msg' => 'Your account has been activated.']);
}

你好我已经将路由放入route.php文件,并将UserController更改为您提到的函数,但是如果您的Kernel.php中有“auth”中间件,它仍然不起作用(与以前相同的问题,没有错误消息)。这将不起作用。不幸的是,它在Kernel.php中,现在我不确定要做什么您可以尝试一下,但这是L 5.3的
public function postActivateUser(Request $request)
{
    // get the user from activation token

    $user = User::findByToken($request->token);
    $user->enabled = 1;
    $user->save();

    return response()->json(['result' => true, 'msg' => 'Your account has been activated.']);
}