2011-08-12 18 views
6

Dodałem simpleopenidselector i lightopenid do mojej aplikacji internetowej Yii, która uwierzytelnia użytkownika i zwraca adres URL z danymi openid. Następnym krokiem jest wykorzystanie danych z dostawcy OpenID do utworzenia nowej tożsamości w Yii w celu zalogowania się użytkownika. Jak to się robi z Yii?Jak zalogować się do użytkownika za pomocą Yii i OpenID

Ponadto, myślę, że muszę utworzyć tabelę typu openid, aby przechowywać openida, a także trzeba dodać użytkownika do mojej tabeli użytkowników. Jeśli użytkownik ma już konto, dodaj go do swojego konta użytkownika, aby zapobiec wielu kontom.

Czy ktoś osiągnął to wszystko z Yii? Jeśli tak, byłbym bardzo zainteresowany, w jaki sposób został osiągnięty.

+0

Nie użyłem tego sam, ale zastanawiam się, czy można to zintegrować z rozszerzeniem [yii-user] (http://www.yiiframework.com/extension/yii-user/)? – ldg

+0

@ldg - [yii-user-management] (http://www.yiiframework.com/extension/yii-user-management/) ma openid, ale nie potrzebuję całego zarządzania użytkownikami i mogę "Śledź wystarczająco kod, aby zobaczyć, w jaki sposób wdrożyli część logowania openid. Właśnie zacząłem kodować w stylu OOP, więc to też sprawia, że ​​jest to trudne. Nie widziałem openida w powyższym linku użytkownika yii. – Mark

Odpowiedz

1

Aby użyć danych z identyfikatora openID jako Yii, można zmodyfikować/nadpisać klasę UserIdentity (chronione/komponenty).

Zastąp istniejącą metodę uwierzytelniania. W tym miejscu można również ustawić aktualną nazwę użytkownika Yii, jak:

$this->username=$openId->username 

(gdzie $openId->username powinna zostać zastąpiona przez zmienną, która zawiera nazwę użytkownika OpenID)

przez nadpisanie akcję boczny/logowania, możesz zadzwonić do zmodyfikowanej metody, na przykład:

$identity=new UserIdentity("m","m");//where m is dummy 
if($identity->authenticate()) { 
      Yii::app()->user->login($identity); 
[...] 
} 

// Update (z powodu Twojego komentarza): Nie jestem pewien, czy rozumiem problemu rację. Ale co powiesz na dodanie nowej metody w UserIdentity, np. AuthenticateOID(). wywołanie tej metody na początku metody oryginalny authenticate(), tak jak poniżej:

if ($this->authenticateOID) {/*set username & return true to end the method here*/} 
else {/*original authenticate method from Yii*/} 

Wewnątrz authenticateOID() sprawdzić, czy uwierzytelnianie OID jest zrobione i/lub jeśli użytkownik nadal jesteś miejscowy „OID - tabela użytkownika”

+0

Wolałbym nie zastępować lub zmieniać bieżącego uwierzytelniania, ponieważ muszę zalogować się do zarejestrowanych użytkowników i użytkowników openid. Próbowałem zmodyfikować UserIdentity, ale zawsze mam problemy z potrzebą nazwy użytkownika i hasła, gdy mam tylko nazwę użytkownika z openid. Muszę sprawdzić, czy użytkownik openid jest zarejestrowanym użytkownikiem, sprawdzając nazwę użytkownika względem tabeli moich użytkowników. Przepraszam, jeśli to nie ma sensu ... Jestem nowy w Yii i OOP. – Mark

+0

@ Mark Mam zaktualizowany mój post ... może to pomaga? –

+0

Część uwierzytelniania jest OK, jest to nowa część UserIdentity, której nie mogę wykonać. Po uwierzytelnieniu identyfikatora OpenID nie muszę go ponownie uwierzytelniać, przynajmniej o tym myślałem. Po uwierzytelnieniu użytkownika przez OpenID, chciałbym stworzyć nową UserIdentity, ale obecna metoda logowania użytkownika Yii wymaga hasła użytkownika podczas logowania, a OpenID nie, co jest problemem, przez który nie mogę się dostać. – Mark

Powiązane problemy