2017-05-16 3 views
0

Ich möchte eine Reaktivierungs-Account-Option erstellen, so dass Benutzer nach der Deaktivierung ihres Kontos immer auf Reaktivieren klicken und zurückgehen können.Laravel Creating Reactivate Button Fehler

Jetzt ist das Problem, wenn ich auf den Link klicke, der die Controller-Funktion aufrufen sollte, funktioniert es nicht und immer wieder auf die /auth Seite, egal was ich tue.

Hier ist meine Middleware:

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\[email protected]', ['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('[email protected]'); 
      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); 
} 

}

habe ich postActivate Funktion im Usercontroller, da es eine ähnliche Funktion (die eine ähnliche Funktion hier):

public function postDeactivateUser(Request $request) 
{ 
    if ($request->ajax()) {    
     $user = Auth::user(); 
     User::removeData($user); 
     $user->enabled = false; 
     $user->save(); 

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

So dass ich eine ähnliche erstellt habe:

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

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

und eine Route:

Route::get('auth/activate', '[email protected]'); 

Ich bin mir nicht sicher, was kann ich es richtig tun, um, vielen Dank für jemand hilft mir.

Antwort

0

In welcher Laravel Version laufen Sie? Ihre Middleware erfordert, dass der Benutzer angemeldet sein muss, um seinen Account zu aktivieren, andernfalls wird er zum Authentifizierungsbildschirm weitergeleitet.

if (!Auth::check()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('/'); 
     } 
    } 

Sie sollten Ihre Aktivierung Route von der Middleware ausgeschlossen und die Aktivierung Token verwenden, um die nicht authentifizierte Benutzer zu identifizieren und sein Konto wieder zu aktivieren.

Setzen Sie diese Zeile außerhalb der Auth-Middleware in Ihre Routes-Datei.

Route::get('auth/activate', '[email protected]'); 

Und dann in der postActivateUser Methode arbeiten, sollten Sie die Anfrage-> Token Parameternamen ändern entsprechend Ihrer Aktivierung url und der User :: findByToken auf Ihre Datenbankfeld Acording.

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.']); 
} 
+0

Hallo! Ich habe die Route in die Datei route.php eingetragen und den UserController in die Funktion geändert, die Sie erwähnt haben, funktioniert aber immer noch nicht (dasselbe Problem wie vorher, keine Fehlermeldungen) – zhiyu

+0

Wenn Sie die 'Auth' Middleware in Ihrem Kernel haben. php das wird nicht funktionieren. – Rodrigo

+0

Leider ist es in Kernel.php, jetzt bin ich mir nicht sicher, was zu tun ist – zhiyu