2012-10-25 36 views
8

Tôi đang tạo ứng dụng cho phép ứng dụng truy cập url ACT sau đó kích hoạt phương thức mô-đun để tạo mục nhập mới bằng API ExpressionEngine. Tuy nhiên, vì không có người dùng đăng nhập/đăng nhập, nó không được phép gửi một mục nhập vào một kênh.Cách tốt nhất để đăng nhập người dùng theo cách lập trình trong ExpressionEngine

Cách tốt nhất để thực hiện việc này là gì. Bỏ qua api EE và gửi các mục nhập bằng tay, hoặc đăng nhập một người dùng trong progamatically .. nhưng sau đó làm thế nào mà sẽ làm việc với các phiên vv vv?

Nếu câu trả lời là "đăng nhập người dùng", thật tuyệt khi thấy mẫu mã nếu có thể.

Cảm ơn!

+0

chỉ cho bạn biết về đề xuất của chúng tôi cho một trang web cụ thể về EE tại đây (nếu bạn đã hỗ trợ nó, bạn cần phải liên kết tài khoản của mình để danh tiếng của bạn được tính) http://area51.stackexchange.com/proposals/46387/expressionengine –

+0

Bạn có thể chuyển một 'member_id' trong cuộc gọi API của mình (như một phần của dữ liệu $) không? –

+0

Không, nó sẽ không cho phép tôi đăng bài đó vì điều khoản cho phép người dùng để không làm việc tôi sợ. Cảm ơn vì lời đáp sâu sắc!! – bjohnb

Trả lời

12

Như bạn đề cập đến, có 2 cách để thêm một mục mới:

  1. tự thêm các hồ sơ cơ sở dữ liệu
  2. sử dụng Kênh Entries API (http://expressionengine.com/user_guide/development/ api/api_channel_entries.html)

sự khác biệt chính là rằng mục bổ sung bằng cách sử dụng API sẽ:

  • thực hiện tất cả xác thực dữ liệu thông thường (ví dụ: các trường được đánh dấu là bắt buộc không được để trống)
  • chạy bất kỳ tiện ích mở rộng nào của bên thứ ba đã cài đặt
  • giữ cho thống kê trang web được cập nhật (ví dụ: số lượng bài đăng của tác giả)

Thêm mục nhập theo cách thủ công là hợp lý dễ dàng cho các kênh đơn giản, nhưng trở nên phức tạp hơn nếu bạn đang sử dụng các kiểu trường bên thứ ba sử dụng các bảng bổ sung.

Để đăng nhập thành viên trong bạn chỉ nên cần phải:

// 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); 

sử dụng các mục kênh api để thêm mục, và sau đó:

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

khi bạn đã hoàn thành.

+0

Chúc mừng Andrew, thực sự đánh giá cao câu trả lời của bạn! – bjohnb

+0

Không sao. Hãy cho tôi biết nếu bạn có bất kỳ vấn đề. –

5

Bạn sẽ muốn xem xét lớp Auth.php trong ./system/libraries/Auth.php. Lớp này là một trừu tượng của API xác thực và cho phép bạn thực hiện chính xác những gì bạn muốn. Tính năng "loggin as user" sử dụng các phương thức tương tự, cũng như mô-đun thành viên.

Bạn cũng có thể xem mô-đun Xác thực (miễn phí) để bạn có ý tưởng về cách người khác làm việc với lớp Auth.

https://objectivehtml.com/authenticate

Dưới đây là một số mã giả để bạn có thể sử dụng:

// 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(); 

Mã này nên làm việc, nhưng tôi không không có thời gian để thực hiện nó, đó là lý do tại sao nó được coi là giả mã.

Tôi cũng nên thêm rằng tôi không chắc chắn liệu đây có phải là cách tốt nhất để giải quyết vấn đề của bạn hay không. Tôi chỉ đơn giản là trả lời các câu hỏi của "làm thế nào để lập trình đăng nhập một người dùng mà không biết mật khẩu của họ và không gửi một mẫu đăng nhập."

+0

Ah có, tôi quên tất cả về đăng nhập như là phương pháp người dùng. Vì vậy, ngoài sự tò mò, phương pháp nào sẽ là cách tốt nhất để tiếp cận vấn đề này? Tôi là tất cả tai! – bjohnb

Các vấn đề liên quan