スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    Symfony2のsecurityでハマった結果少しだけわかったこと(メモ)

    0
      Symfony¥Bundle¥SecurityBundleを使ってログイン機構を作っているときに、ログイン状態を手動で変更したいことってありますよね!(いきなり力説

      通常はlogin_checkにpostすればいいのですが、ログインするかどうかは任意でログインすれば特典あり、という仕様の時(ECサイトとかECサイトとかECサイトとか)に、どうやって実装するか考えると、方法は二通りあると思います。
      *ログイン希望する/しないを選択するUI(ボタンだったり、ラジオボタンだったり)をトリガーにしてjavascriptで移動先を変える。
      *POSTを受け取ってからログイン希望の場合はログイン、ログイン希望しない場合はログインしないまま処理を続行する。

      このうち、通常のログインアクション外でのログイン状態変更が必要になるのは、後者の実装を選択したケースです。

      通常のアクション内で手動でログインを行うには、下記のようなコードを書けば良いようです。
      // Get the security firewall name, login
      $providerKey = $this->container->getParameter('fos_user.firewall_name');
      $token = new UsernamePasswordToken($user, $password, $providerKey, $user->getRoles());
      $this->get("security.context")->setToken($token);

      // Fire the login event
      $event = new InteractiveLoginEvent($this->getRequest(), $token);
      $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);

      引用元:http://stackoverflow.com/questions/10422251/manual-authentication-check-symfony-2

      一つだけ注意しなければいけないのは、Symfony¥Component¥Core¥Authentication¥Token¥UsernamePasswordTokenのソースにも、上記のコードにも$providerKeyという名前で示されている変数が、security.ymlに記載したprovidersのほうにつけた名前ではなくfirewallのほうにつけた名前だということです。(上記コードのコメントにもfirewall nameと書いてくれていますね)

      ここを間違えると、コード正しく書いたはずなのにいつまで経ってもログイン状態が変更できない…と延々悩むことになりますので注意です。
      以上、私が不注意で無駄にハマったという経験談の披露でしたorz


      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 19:51
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        コメントする








           

        PR

        calendar

        S M T W T F S
          12345
        6789101112
        13141516171819
        20212223242526
        2728293031  
        << August 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM