2017-05-03 11 views
2

私は前のページに戻って問題に直面しています。何か助けてくれれば非常に感謝しています。 私はユーザー名とパスワードすべての物事が右に行くが、同じページ内のユーザー滞在入力したとき、これは私のコントローラのログインアクション

public function actionLogin() { 
     $this->layout = 'login'; 
     if (!\Yii::$app->user->isGuest) { 
      return $this->goHome(); 
     } 
     $model = new LoginForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->login()) { 
      return $this->goBack(); 
     } else { 
      return $this->render('login', [ 
         'model' => $model, 
      ]); 
     } 
} 

です(ログインページ)。私はまた、いくつかの他のビューをレンダリングしようとするか、または何らかのアクションにリダイレクトしようとしますが、動作しません。 goBack()関数がうまく動作する前に何かをエコーすると、ユーザーがログインしていることを意味します。

+0

ドックを見てください:http://www.yiiframework.com/doc-2.0/yii-web-controller.html#goBack()-detail URLを ' goBack() 'どこに行くのか知っています。 – robsch

+0

あなたはどのファイルとreturnUrlを設定するか教えてください – Dani

答えて

0

あなたは、アクションが実行された後にあなたがそれぞれ呼ばれるアクションを思い出すことができ

return $this->redirect(Yii::$app->request->referrer); 


return $this->goBack((
     !empty(Yii::$app->request->referrer) ? Yii::$app->request->referrer : null 
)); 

または

if(Yii::$app->request->referrer){ 
    return $this->redirect(Yii::$app->request->referrer); 
}else{ 
    return $this->goHome(); 
} 
+0

はまだ同じ問題を持っています – Dani

+0

回答が更新されました – scaisEdge

1

を使用することができます。これは、ユーザオブジェクトにsetReturnUrl()で行うことができます(注意:ユーザオブジェクトは匿名ユーザにも存在します)。これが行われた場合、goBack()は正常に動作します。

setReturnUrl()と呼ぶ場所は、afterAction eventです。これはアプリケーション設定(web.phpなど)で実装できます。

$config = [ 
    'id'    => 'foo-app', 
    'basePath'  => dirname(__DIR__), 
    'params'   => ... 
    'bootstrap'  => ['log'], 
    'components'  => ..., 

    'on afterAction' => function (yii\base\ActionEvent $e) { 
     if($e->action->id !== 'login' && $e->action->controller->id !== 'site') 
      Yii::$app->user->setReturnUrl(Yii::$app->request->url); 
    }, 
]; 

'on afterAction'は、アクションが呼び出されるたびに呼び出されます。 Yii::$app->request->urlには、最後(現在)のフルURLが含まれています。

site/loginのURLが保存されないように、ifステートメントを追加しました。これは、元に戻すページではないためです。

これはテストしていません。私はそれがうまくいきたいthis discussionによると、Yii::$app->request->referrerを使用して信頼性が高くありません。

さらに情報が見つかりましたhere

+0

はまだ同じ問題があります – Dani

+0

@Dani他に特別なことはありますか? AccessControlの実装/使用法または派生したUserクラス? yii2-app-advancedやyii2-app-basicのデフォルトのログインプロセスは、私が知る限り、既に必要な動作をしているはずです。サイト/ログインはどのように呼び出されますか? – robsch

+0

私の遅いrplyのためのsory私はyii2改善版からログインシステムを実装している。私はまだ同じ問題を抱えていますので、私にはとても緊急のおかげで助けてください – Dani

0

あなたはユーザ/ログインモデルをConfigに割り当ててください web.phpを開き、ログイン/ユーザモデル を追加してください。

'user' => [ 
     'identityClass' => 'app\models\Users', 
     'enableAutoLogin' => true, 
    ],