2017-05-16 4 views
0

사용자 계정을 비활성화 한 후 다시 활성화를 클릭하고 돌아갈 수 있도록 계정 재 활성화 옵션을 만들고 싶습니다.Laravel 재 활성화 단추 만들기 오류

이제 문제는 내가 컨트롤러 기능을 호출해야하는 링크를 클릭했을 때 작동하지 않고 내가 무엇을 하든지 /auth 페이지로 계속 돌아 오는 것입니다. 그래서

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

: 유사한 기능 (여기에 유사한 기능)가 있기 때문에

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); 
} 

}

나는 UserController에 postActivate 기능을 생성 :

지금 여기 내 미들웨어입니다 비슷한 것을 만들었습니다.

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

나는 내가 바로 사람에 대한 감사가 저를 도와 만들기 위해 무엇을 할 수 있는지 확실하지 않다.

답변

0

어떤 Laravel 버전을 실행하고 있습니까? 미들웨어는 계정을 활성화하기 위해 사용자가 로그인해야하며, 그렇지 않으면 인증 화면으로 리디렉션됩니다.

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

인증 경로를 미들웨어에서 제외하고 인증 토큰을 사용하여 인증되지 않은 사용자를 식별하고 계정을 다시 활성화해야합니다.

라우트 파일의 인증 미들웨어 외부에이 행을 넣으십시오.

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

그리고 다음 postActivateUser 방법에서 작동, 당신은 활성화 URL과 사용자 :: 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.']); 
} 
+0

안녕하세요! 나는 route.php 파일에 경로를 넣었고 언급 한 기능으로 UserController를 변경했지만 아직 작동하지 않습니다 (이전과 같은 문제, 오류 메시지 없음) – zhiyu

+0

커널에 '인증'미들웨어가있는 경우. PHP는이 작동하지 않습니다. – Rodrigo

+0

불행히도, 그것은 Kernel.php 안에 있습니다. 지금 무엇을해야할지 모르겠습니다. – zhiyu