2012-10-25 23 views
8

Buduję aplikację, która pozwala aplikacji trafić adres URL ACT, który następnie uruchamia metodę modułu, aby utworzyć nowy wpis za pomocą interfejsu API ExpressionEngine. Jednakże, ponieważ nie ma żadnego użytkownika zalogowanego/zalogowanego, nie można przesłać wpisu na kanał.Jaki jest najlepszy sposób, aby logować użytkownika programowo w ExpressionEngine

Jaki jest najlepszy sposób na zrobienie tego. Pomiń aplikację EE api i prześlij ją ręcznie lub zarejestruj użytkownika w sposób progamatyczny ... ale jak to by działało w przypadku sesji itp.?

Jeśli odpowiedź brzmi "zaloguj użytkownika", byłoby miło zobaczyć próbkę kodu, jeśli to możliwe.

Dzięki!

+0

tylko informując o naszej propozycji dla strony internetowej poświęconej EE (jeśli już ją wspierasz, musisz połączyć swoje konto, aby Twoja reputacja się liczyła) http://area51.stackexchange.com/proposals/46387/expressionengine –

+0

Czy możesz po prostu przekazać 'member_id' w twoim wywołaniu API (jako część $ data')? –

+0

Nie, to nie pozwól mi opublikować tego wpisu ze względu na pozwolenie użytkownika rzeczy, więc nie będzie działać boję się. Dzięki za odpowiedź !! – bjohnb

Odpowiedz

12

Jak można wspomnieć, są 2 sposoby dodawania nowego wpisu:

  1. ręcznie dodać rekordy bazy danych
  2. użyć API Wpisy kanał (http://expressionengine.com/user_guide/development/ api/api_channel_entries.html)

Główne różnice to, że wpisy dodane za pomocą API:

  • wykonać wszystkie zwykłe sprawdzanie poprawności danych (tj. Pola oznaczone jako wymagane nie mogą być puste)
  • uruchomić dowolne rozszerzenia innych firm, które zainstalowały
  • aktualizować statystyki witryny (np. Liczbę postów) autor:)

Dodanie wpisu ręcznie jest proste dla prostych kanałów, ale staje się bardziej skomplikowane, jeśli używasz typów pól zewnętrznych, które używają dodatkowych tabel.

Aby zalogować się w członka powinno wystarczy:

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

użyć API wpisy kanału Aby dodać wpis, a następnie:

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

kiedy skończysz.

+0

Pozdrawiam Andrew, naprawdę dziękuję za odpowiedź! – bjohnb

+0

Bez problemu. Daj mi znać, jeśli masz jakiekolwiek problemy. –

5

Będziesz chciał rzucić okiem na klasę Auth.php w ./system/libraries/Auth.php. Ta klasa jest abstrakcją interfejsów API uwierzytelniania i umożliwia wykonanie dokładnie tego, co chcesz. Funkcja "loggin as user" używa tych samych metod, a także modułu członkowskiego.

Możesz również rzucić okiem na moduł Authenticate (który jest bezpłatny), abyś mógł zorientować się, jak inni pracują z klasą Auth.

https://objectivehtml.com/authenticate

Oto niektóre pseudo kod do użycia:

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

Kod ten powinien działać, ale nie nie miał czasu, aby go wykonać, dlatego jest uważany pseudo kod.

Należy również dodać, że nie jestem pewien, czy to nawet najlepszy sposób na rozwiązanie problemu. Po prostu odpowiadam na pytania "jak programowo zalogować użytkownika bez znajomości jego hasła i bez przesyłania formularza logowania."

+0

Ach tak, zapomniałem o logowaniu jako metodzie użytkownika. Więc, z ciekawości, jaka metoda byłaby najlepszym sposobem podejścia do tego problemu? Zamieniam się w słuch! – bjohnb

Powiązane problemy