8

アプリが ACT URL にアクセスできるようにするアプリを構築しています。これにより、モジュール メソッドがトリガーされ、ExpressionEngine API を使用して新しいエントリが作成されます。ただし、ログイン/ログインしているユーザーがいないため、チャンネルにエントリを送信することはできません。

これを行う最善の方法は何ですか。EE API をバイパスしてエントリを手動で送信するか、ユーザーをプログラム的にログインします..しかし、それはセッションなどでどのように機能しますか?

答えが「ユーザーのログイン」である場合は、可能であればコード サンプルを参照してください。

ありがとう!

4

2 に答える 2

12

おっしゃるとおり、新しいエントリを追加するには 2 つの方法があります。

  1. データベース レコードを手動で追加する
  2. Channel Entries API (http://expressionengine.com/user_guide/development/api/api_channel_entries.html) を使用します。

主な違いは、API を使用して追加されたエントリは次のようになることです。

  • 通常のデータ検証をすべて実行します (つまり、必須としてマークされているフィールドを空にすることはできません)。
  • インストールしたサードパーティの拡張機能を実行する
  • サイト統計を最新に保つ (例: 著者による投稿数)

エントリを手動で追加するのは、単純なチャネルではかなり簡単ですが、追加のテーブルを使用するサード パーティのフィールド タイプを使用している場合は、より複雑になります。

メンバーにログインするには、次の手順を実行する必要があります。

// Get the member's id (the member must have permissions to post entries)
$member_id = 1;

// Create session
$this->EE->session->create_new_session($member_id);

チャネル エントリ API を使用してエントリを追加してから、次の操作を行います。

// Log user back out
$this->EE->session->destroy();

あなたが終わったら。

于 2012-10-26T09:05:25.283 に答える
5

./system/libraries/Auth.php の Auth.php クラスを見てみたいと思うでしょう。このクラスは、認証 API の抽象化であり、まさに必要なことを行うことができます。「ユーザーとしてログイン」機能は、これらと同じメソッドとメンバー モジュールを使用します。

また、Authenticate モジュール (無料) を参照して、他のユーザーが Auth クラスをどのように使用しているかを理解することもできます。

https://objectivehtml.com/authenticate

使用する疑似コードを次に示します。

// Fetch the member from the DB using whatever logic you need
$this->EE->db->where('username', 'some-username');
$member = $this->EE->db->get('members');

$this->EE->load->library('auth');

// Load a new Auth_result object which logs in the member
$authed = new Auth_result($member->row());
$authed->start_session($cp_session = FALSE);

$member->free_result();

このコードは機能するはずですが、実行する時間がありませんでした。そのため、疑似コードと見なされます。

また、これが問題を解決する最善の方法であるかどうかもわかりません。「パスワードを知らず、ログインフォームを送信せずに、ユーザーをプログラムでログインする方法」という質問に答えているだけです。

于 2012-10-25T17:02:16.730 に答える