2016-11-19 2 views
0

Ich brauchte ein modales Popup, um nach einem Passcode zu fragen. Ich habe das Folgende gemacht, aber es leitet mich immer zur Anmeldeseite weiter. Und es scheint, als ob die Sitzung überhaupt nicht erstellt wurde.yii2 Erstellen von Passcode vor dem Zugriff auf die Webseite

main.php (Layout)

<div class="modal fade" id="mymodal" role="dialog"> 
    <div class="modal-dialog"> 
     <!-- Modal content--> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <h4 class="modal-title"><span class="glyphicon glyphicon-lock"></span>PASSCODE</h4> 
      </div> 
      <form role="form" id="myform" action="site/passcode"> 
       <div class="modal-body"> 
        <div class="form-group"> 
         <!--<label for="psw"><span class="glyphicon glyphicon-eye-open"></span> Enter Passcode</label>--> 
         <input type="text" class="form-control" id="passcode" placeholder="Enter Passcode"> 
        </div> 
       </div> 
       <div class="modal-footer"> 
       <button id="passcodeBtn" class="btn btn-success btn-block" onClick="btn_click()">Submit</button> 
      </div> 
     </form> 
    </div> 

</div> 

<?php 
    if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 
     //$_SESSION["user"] = "permit"; 
    if(!isset($_SESSION["user"])) { 
      echo "<script type='text/javascript'> 
      $('#passcodeModal').modal({ 
       backdrop: 'static', 
       keyboard: false 
      }) 
    $(document).ready(function(){ 
     $('#passcodeModal').modal('show'); 
    }); 
    </script>"; 
    } 
?> 
<script> 

    function validatePasscode_click() 
    { 
     var pc = document.getElementById('passcode').value 
     //document.getElementById("passcodeform").submit(); 
     // 
     console.log("inside click"); 
     $.ajax({ 
     type: "POST", 
     url: '/site/passcode', 
     data: {name: pc, _csrf: yii.getCsrfToken()}, 
     //dataType: "json", 
     success: function(response){ 
      console.log("ajax"); 
      var resp = response; 
      var answer = jQuery.parseJSON(response); 
      console.log(answer); 
      if(answer == '123'){ 
      $('#passcodeModal').modal('hide'); 
     } 
    }}); 
     return false; 
    } 
</script> 

I

CONTROLLER

public function actionPasscode() { 
    // a list of available cities 
    if(Yii::$app->request->isAjax) { 
     $data = Yii::$app->request->post(); 
     $passcode = $data['name']; 
     $_SESSION["user"] = "permit"; 
     if($passcode == '123'){ 
      if(!isset($_SESSION)) 
      { 
       session_start(); 
      } 
      $_SESSION["user"] = "permit"; 
     } 
     return json_encode($passcode); 
    } 
} 

Ich muss das Passwort mit Ajax validieren validiert dann die Sitzung festgelegt also für den Abend Auf dieser anderen Seite werden sie nicht erneut nach dem Passcode fragen, wenn Sie vor

Antwort

1

eingegeben haben. Ihre Sitzung wird nicht erstellt, da Sie in Yii2 eine Sitzung anders als in Ihrem Code erstellen. Yii2 verwendet yii\web\User Klasse für Authentifizierung und Sitzungsspeicherung.

Yii::$app->user->login($this->getUser(), 3600 * 24 * 30); 

Wo $this->getUser() kehrt:

Grundsätzlich sollten Sie so etwas wie verwenden

static::findOne(['email' => $email]); 

Dieses genommen und wurde ein wenig verändert aus Grund Vorlage und das ist genau, wie Yii2 speichert Benutzersitzung Ihre eigene erstellte Sitzung könnte (und ist wahrscheinlich) mit der Sitzungsverwaltung von Yii2 in Konflikt stehen.

Bitte versuchen Sie es mit dieser Methode.

Verwandte Themen