バージョン選択

フォーラム

メニュー

オンライン状況

43 人のユーザが現在オンラインです。 (29 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 42
sayrug2 もっと...

サイト内検索

 > プラグイン > 管理者ログイン成功直後のイベント処理について

プラグイン

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ikemoto
投稿日時: 2015/11/15 19:20
対応状況: −−−
一人前
登録日: 2015/10/2
居住地:
投稿: 79
管理者ログイン成功直後のイベント処理について
お世話になります。

プラグインで、管理者としてログインしたときに、
そのログインユーザーのユーザーIDを使用して、
別途情報を取得し、セッションに入れるという処理をしたいです。

それで、ログインイベントの後に処理をするために、
イベント設定画面に
eccube.event.controller.admin_login.after:
- [onAdminLoginAfter, NORMAL]

を記述して、該当する箇所に処理を書いたのですが…
ログイン失敗時にしかここを通りません。

admin_loginで行っている処理を見ると、

if ($app->isGranted('ROLE_ADMIN')) {
 return $app->redirect($app->url('admin_homepage'));
}

…という記載があるので、これは
ログイン成功して管理者権限が付いている場合は
admin_homepageにリダイレクトするということですよね…?

そこで、ログイン成功直後は必ずそこに飛ぶんだろうなという前提にて
イベント設定画面に
eccube.event.controller.admin_homepage.before:
- [onAdminHomepageBefore, NORMAL]

と記載し、admin_homepageに制御が行く前段階に処理を書くと上手く行きましたが…
これだと、もしリダイレクト先が変わった時にどうしよう??
とも思うのです。

全ての処理に先立って…ということになると、
プラグインのサービスプロバイダのところで
registerかbootの中に書けば…とも思ったのですが、
ここだと、
・現在のルートがadminかdefaultかの判定が出来ない?
・ルートがわからないなら$app->isGranted('ROLE_ADMIN')で…⇒使えない
・$app['user']->getId();でログインユーザーのIDがとれない?
等々で無理なのだろうか?と…

「ログイン成功直後に特定の処理を行う」ベストな手段というものはあるのでしょうか…?


red
投稿日時: 2015/11/15 19:41
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1570
Re: 管理者ログイン成功直後のイベント処理について
こんなことを書くと怒られそうですが、

プラグインの機能作った人はどう使われるか、どう使うかは全く考えないで作っていると思います
なので、どうするのがベストでしょう?と聞いても何の返事もないと思います

じゃあどうするのがいいかというと自分が使いやすいようにプルリクして本体を直してしまうのが手っ取り早いと思います


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

ikemoto
投稿日時: 2015/11/15 20:21
対応状況: −−−
一人前
登録日: 2015/10/2
居住地:
投稿: 79
Re: 管理者ログイン成功直後のイベント処理について
いや、私がプラグインを「作ろう」としていて、ログイン成功直後のイベントを拾おうとして上手く行かない…。
でも、もしかするとちゃんと取れる方法があるかもしれないので、プラグインに造詣が深い人ならそのあたりのベストプラクティスを知っているかもしれないのでもしあれば教えてください、ということなのですが…。

今までもプラグインを作成する際に
「こうしたくて、ここまでできたけどあと一押しのところが出来ない」と相談した際に、ツッコミを入れるだけではなく、もっと良い方法をご教示してくださる人が居るので、そういうご教示を下さる人が居れば助かります、ということです。

いらっしゃらなければ力技でも実現できるけれど、ここで聞く事で、「そういう時自分はこうしているよ」と教えて下さる方も居ますし。
多分教えてくださる方はかなりプラグインを作りこんで知識を積み上げているのだと思います。
EC-CUBE3自体がリリースされてまだ数か月なので、答えて下さる方はかなり少数ですが、実直に応えて下さりとても助かっていますし、そういう方々が提供しているプラグインを読むだけでも、質問せずに解決できる事が多々あって勉強になっています。

現時点で方策が無いなら無いで、「現状無理だと思います」という情報があれば暫定的にどうにかする方法を考えても良いのだし。

方法があるならば情報提供してくれる方が出てくるし、無ければ回答が付かないだけのことで、一応ここで聞いてみる事に意味はあると思うのですが、こういう考えは間違っているでしょうか?

回答が付かなければ、後日セミナーに参加した時に本体開発者の方々に質問・要望出ししてからここに私自身が結果報告すれば良いのだし。
私も以前Render前に変数を差し替えられないか、セミナー参加時に確認して、「現状非対応」というのをここで情報提供したこともあります。

解法があることもわからずに単純にプルリクなんか出したら、それこそ「車輪の再発明」をやりかねないし、ゴミレベルのプルリクになりかねない。そもそも現時点で自分で今回の件に関するプログラム本体への改変方法を閃いて実装⇒プルリク出せる程しくみに対する造詣は深くありません。

まだ、EC-CUBEプラグインのセミナーに参加しつつ「なんとか作れるようになってきた」段階の人間ですし、その程度のレベルですから、「実は可能だけれど、単に私がその事を知らないだけ」の可能性も高いからここで質問を出しているのです。
ikemoto
投稿日時: 2015/11/15 23:56
対応状況: −−−
一人前
登録日: 2015/10/2
居住地:
投稿: 79
半分までは自己解決…
色々試行錯誤しているうちに、
ログイン成功直後に、という限定的なイベントは取れませんでしたが、
「全ての処理に先立って…」という観点ではなんとかなりました。

引用:


全ての処理に先立って…ということになると、
プラグインのサービスプロバイダのところで
registerかbootの中に書けば…とも思ったのですが、
ここだと、
・現在のルートがadminかdefaultかの判定が出来ない?
・ルートがわからないなら$app->isGranted('ROLE_ADMIN')で…⇒使えない
・$app['user']->getId();でログインユーザーのIDがとれない?
等々で無理なのだろうか?と…



この点に関しては「先だって」ではなく「済んだ後」になりますが、
プラグインのイベント定義に
eccube.event.app.after:
- [onEventAppAfter, NORMAL]

…と記載して、イベント処理用のクラスのonEventAppAfterに目的の処理をかいたら成功しました。

ただ、どのコントローラーを通っても確実に毎回動くので、色々条件付けする必要がありますが…。どこから来たのか取れたら確実なのですが、普通はコントローラーのafterイベントで事足りますもんね…

現在のルートがadminでログインが済んでいるかどうかは、
if ($session->has('_security_admin')){ …で取れました。
k-yamamura
投稿日時: 2015/11/19 20:24
対応状況: −−−
一人前
登録日: 2015/7/8
居住地:
投稿: 72
Re: 管理者ログイン成功直後のイベント処理について
ikemoto 様

現状だと「ログイン成功直後に特定の処理を行う」という方法は存在しておらず、
プラグインで取得方法する方法もありません。

試してみないと何ともいえませんが、
ログイン先の遷移を変更できるdefault_tarage_pathというのが存在しております。

http://symfony.com/doc/current/reference/configuration/security.html
http://docs.symfony.gr.jp/symfony2/cookbook/security/form_login.html

<input type="hidden" name="_target_path" value="account" />
を管理画面のログインにプラグインから差し込みし、
特定の処理をさせたいControllerをプラグイン側で新たに作成し、
そのControllerで行えば実現できるのではないでしょうか。

こういう流れとなります。
ログイン → プラグインで作ったなんらかの処理 → 管理画面
という感じとなります。


本来であればこういうことを簡単にできるような仕組みが本体側で提供できれば良いのですが、
こちらでも一度プラグインを作って試してみます。

これだけでは分かりづらいと思いますので、
分からない事があれば何でも構いませんので再度ご質問ください。


----------------
株式会社キュール
support@cule.jp

EC-CUBE3で困ったことがありましたらお気軽にご相談ください。
ikemoto
投稿日時: 2015/11/19 21:26
対応状況: −−−
一人前
登録日: 2015/10/2
居住地:
投稿: 79
Re: 管理者ログイン成功直後のイベント処理について
情報ありがとうございます。

ログイン画面上にhiddenタグでログイン成功時の遷移先を指定
  ↓
プラグイン内でその遷移先のコントローラーを作成
該当コントローラー内で目的の処理(セッション格納等)を行う
  ↓
さらにそのコントローラー内で目的画面へリダイレクトする

ってことですね?

>これだけでは分かりづらいと思いますので、

ログイン処理自体が他の箇所と異なり、特別な処理を経由しているため、普通のやり方では無理だというところまではなんとなく理解していましたが、対応策が不明だったので、教えていただいた参考URLの内容でかなり理解できました。
私もプラグインでやれるか試してみます。

>分からない事があれば何でも構いませんので再度ご質問ください。

この方法だと目的画面へのリダイレクトが固定になってしまうな…と思うのですが、ユーザーが特定の管理画面URLを指定してきた場合、ログイン後直で飛ばす場合「_security.target_path 」の格納値を利用すれば良いのでしょうか?
ただ、↑の部分も当方で確認出来る事ですので、こちらでも確認しつつ実験してみます。

>本来であればこういうことを簡単にできるような
>仕組みが本体側で提供できれば良いのですが、

本体側にあれば便利だしそれに越したことはないですが、何らかの方法で対策がとれるのであれば序盤はプラグインでも何でも対応ができればOKなので情報頂けて助かります。

本体側で現状切実に欲しいのは、Render呼出しに割って入って、引数に入っている変数やテンプレートをすげ替える機能です…
これさえあれば、プラグインで検索とかの結果クエリ(検索対象項目増やしたいので)や結果表示テンプレートを簡単に変えられる…!と思っているので。

単票画面だとなんとかなるのですが、連票(複数レコード)のプラグインでのカスタマイズ対応が現状難しいです。複数レコードの場合、結果クエリ自体を差し替えする必要が出る事もあるので。
ikemoto
投稿日時: 2015/11/26 12:31
対応状況: 確認中
一人前
登録日: 2015/10/2
居住地:
投稿: 79
Re: 管理者ログイン成功直後のイベント処理について
お世話になります。

アドバイス頂いた内容で、
ログイン画面に処理させたいコントローラーへつながる指定を入れて
プラグイン側で該当コントローラーへのルーティング設定
該当コントローラー内でセッション格納+ホーム画面へのリダイレクト

…を作ってみましたが、上手く行きました。
最初に考えていた「力技」でなんとかする方法よりも「ログイン成功時」のみ確実に実行されるのでスッキリしました。有益な情報を頂き、ありがとうございます。

ただ、

引用:


この方法だと目的画面へのリダイレクトが固定になってしまうな…と思うのですが、ユーザーが特定の管理画面URLを指定してきた場合、ログイン後直で飛ばす場合「_security.target_path 」の格納値を利用すれば良いのでしょうか?
ただ、↑の部分も当方で確認出来る事ですので、こちらでも確認しつつ実験してみます。



こちらの方は_security.target_pathの内容が空白だったためリダイレクト先をホームに固定するしかありませんでした。
管理画面⇒商品マスタのURLでログイン画面に飛ばされた時にはログイン後ダイレクトに商品マスターに飛びたかったのですが…
k-yamamura
投稿日時: 2015/11/27 16:52
対応状況: −−−
一人前
登録日: 2015/7/8
居住地:
投稿: 72
Re: 管理者ログイン成功直後のイベント処理について
ikemoto 様

実装が出来たということで良かったです。

ログイン後にリダイレクト先を変更したいという方法ですが、
ログイン画面に飛ばされた後リファラー値をログイン画面でhiddenかsessionで保持しておき、
プラグインで作成したコントローラー内でリファラー値を取得してリダイレクトする
ということで実現可能かどうか一度試して頂けないでしょうか。


----------------
株式会社キュール
support@cule.jp

EC-CUBE3で困ったことがありましたらお気軽にご相談ください。


スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,780名です
総投稿数は109,972件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1644
8
red
1570
9
mcontact
1289
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.