0

ユーザーがメール アドレスに基づいて、ストレート SQL を使用してログインしているかどうかを確認するにはどうすればよいですか?

ExpressionEngine と高度に結合されたシステムがあり、多くの EE テンプレートで Magento API を使用できません。

現在のログイン コードを表示するように編集します。

Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('customer/session');
$session->login($ParticipantInfo['PreferedEmailAddress'],'default_password');
$session->setCustomerAsLoggedIn($session->getCustomer());
4

1 に答える 1

1

TL;DR : 私の知る限り、セッション データが db に保存されていても、プレーンな SQL を介してのみ伝える明確な方法はありません。

質問も次のようになります: どのユーザーですか? 顧客、管理者、または API ユーザーですか? ファイル システム内にセッション データを保存すると仮定すると、いくつかのオプションを考えることができます。

API

API ユーザーの場合は、テーブルを見てください。メール アドレスを格納するテーブルとapi_session結合できます。api_userただし、特定のユーザー ID に対してセッション ID とログ日付のみが保存され、セッションがまだアクティブであるかどうかを知る方法がないため、これら 2 つのテーブルの情報で十分です。

このデータを照会すると、おそらく次のようなものになります。

SELECT * 
    FROM api_user 
INNER JOIN api_session ON api_user.user_id = api_session.user_id
WHERE api_user.email = "<known_email>"

管理者と顧客

管理者ユーザーは 内admin_userに保存されますが、 の場合と同様にapi_user、セッション管理用の情報は保存されません。

customer_*顧客はテーブル内に格納されます。表でそれらを調べることができlog_visitorます:

SELECT * 
    FROM log_visitor_online
INNER JOIN customer_entity ON customer_entity.entity_id = log_visitor_online.customer_id
WHERE c.email = "<known_email>"

ここでも、セッションがまだ有効な場合、情報を取得できません。編集:ティムは、彼の答えでそれを正しく行う方法を示しました。

一般的に、悪いニュース

ユーザーが現在ログインしている場合、セッションの作成日のみ、情報は直接保存されません。すぐに使用できる機能を使用すると、ユーザーが現在ログインしているかどうかを SQL 経由で正確に判断できないはずです。これは、magento がユーザーのセッションの有効性を db に保存されているセッション データに対してチェックするため、せいぜい無意味です。 /filesystem であるため、ユーザーのセッション データがなければ、100% の精度で何も判断できません。

モジュールを書けるなら朗報

ちょっとした作業で、Magento のセッション管理に接続できます。コアに同梱されているイベントのチート シートがあります。また、リッスンしてコードを実行できる独自のカスタム イベントを作成することもできます。

ここでのアイデアは、顧客 (管理者または API ユーザーの逆) または追加モジュール テーブル内に追加情報を格納できるモジュールを作成することです。ログイン プロセスにフックして、api_user/customer/admin のタイムスタンプを設定し、リクエストに応じてそのタイムスタンプを更新できます。ユーザーのタイムスタンプがたとえば X 秒間更新されていない場合、そのユーザーはログインしていると見なされます。ログアウト イベントでユーザーのタイムスタンプを削除します。

ただし、これも 100% 正確というわけではなく、システムでのユーザーの操作に大きく依存します。

何はともあれ、少しでもご参考になれば幸いです。

lg、

フロー

于 2012-07-23T20:55:56.153 に答える