2011-08-12 38 views
6

Tôi đã thêm simpleopenidselectorlightopenid vào ứng dụng web Yii của mình và ứng dụng này xác thực người dùng và trả về url có dữ liệu openid. Bước tiếp theo là sử dụng dữ liệu từ nhà cung cấp OpenID để tạo danh tính mới trong Yii để đăng nhập vào người dùng. Làm thế nào được thực hiện với Yii?Làm cách nào để đăng nhập người dùng bằng Yii và OpenID

Ngoài ra, tôi nghĩ rằng tôi cần phải tạo một bảng mở để lưu trữ các openid và cũng cần phải thêm người dùng vào bảng người dùng của tôi. Nếu người dùng đã có tài khoản thì hãy thêm openid vào tài khoản người dùng của họ để ngăn nhiều tài khoản.

Có ai đã đạt được tất cả điều này với Yii không? Nếu vậy, tôi sẽ rất quan tâm đến cách nó được thực hiện.

+0

Tôi chưa tự mình sử dụng, nhưng tôi tự hỏi liệu có thể tích hợp điều này với tiện ích mở rộng [yii-user] (http://www.yiiframework.com/extension/yii-user/) không? – ldg

+0

@ldg - [yii-user-management] (http://www.yiiframework.com/extension/yii-user-management/) có openid đi kèm với nó nhưng tôi không cần toàn bộ quản lý người dùng và tôi có thể không làm theo mã đủ để xem cách họ triển khai phần đăng nhập mở. Tôi chỉ bắt đầu viết mã theo phong cách OOP, vì vậy điều đó cũng làm cho nó trở nên khó khăn. Tôi không thấy openid trong liên kết yii-user mà bạn đã đề cập. – Mark

Trả lời

1

Để sử dụng dữ liệu từ openID dưới dạng đăng nhập Yii, bạn có thể sửa đổi/ghi đè lớp UserIdentity (được bảo vệ/thành phần).

Ghi đè phương thức xác thực hiện tại. Tại thời điểm này, bạn cũng có thể đặt tên người dùng Yii hiện nay, như:

$this->username=$openId->username 

(nơi $openId->username nên được thay thế bởi các biến chứa tên người dùng OpenID)

Bằng cách ghi đè lên các hành động bên/đăng nhập, bạn có thể gọi phương thức sửa đổi của bạn, như thế này:

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

// cập nhật (vì bình luận của bạn): Không chắc, nếu tôi hiểu vấn đề của bạn đúng. Nhưng điều gì về việc thêm một phương thức mới trong UserIdentity, như authenticateOID(). gọi phương pháp này vào lúc bắt đầu của phương pháp gốc xác thực(), như vậy:

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

Bên authenticateOID() bạn kiểm tra nếu xác thực OID được thực hiện và/hoặc nếu người dùng vẫn còn trong bạn địa phương "OID - dùng bảng"

+0

Tôi không muốn ghi đè hoặc thay đổi xác thực hiện tại vì tôi cần phải đăng nhập người dùng đã đăng ký và người dùng mở. Tôi đã cố gắng để sửa đổi UserIdentity nhưng luôn luôn chạy vào các vấn đề với cần tên người dùng và mật khẩu, khi tôi chỉ có một tên người dùng từ openid. Tôi cần kiểm tra xem người dùng openid có phải là người dùng đã đăng ký hay không bằng cách kiểm tra tên người dùng với bảng người dùng của tôi. Xin lỗi nếu điều đó không có ý nghĩa ... Tôi mới đến Yii và OOP. – Mark

+0

@Mark tôi đã cập nhật bài đăng của mình ... có thể điều này sẽ giúp ích? –

+0

Phần authentcation là OK, đó là phần UserIdentity mới mà tôi dường như không thể tập luyện. Sau khi đăng nhập OpenID được xác thực, tôi không cần phải xác thực lại nó, ít nhất đó là những gì tôi đã suy nghĩ. Sau khi người dùng được xác thực thông qua OpenID, tôi muốn tạo UserIdentity mới, nhưng phương thức đăng nhập người dùng Yii hiện tại yêu cầu mật khẩu người dùng khi đăng nhập và OpenID không phải là vấn đề mà tôi dường như không thể vượt qua được. – Mark

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