Hướng dẫn cách sử dụng OpenID của yahoo, gmail bằng PHP

Hướng dẫn cách sử dụng OpenID của yahoo, gmail bằng PHP

OpenID là gì? là một dịch vụ từ 1 nhà cung cấp nào đó (yahoo, gmail, facebook, zing, ...) cho phép người dùng có thể truy cập vào một trang web bất kỳ bằng tài khoản của họ từ website của mình.

Nếu ai thích thì vào google search: "Openid là gì" để tìm hiểu thêm nha, mình chỉ biết có vậy. kaka

Có gì lợi nếu chúng ta sử dụng openid?

Điều này thì mình không biết, phụ thuộc và việc khai thác thông tin của người viết chương trình thôi, nhưng theo mình

Khi website sử dụng openid từ 1 nhà cung cấp khác (yahoo, gmail, facebook, zing, ...), chúng ta đã tạo nhiều hướng tiếp cận với khách hàng, họ không cần đăng ký tài khoản tại dịch vụ của mình, mà họ có thể đăng nhập trực tiếp từ tài khoản có sẵn của họ, giúp quá trình giao dịch diễn ra nhanh hơn và .. website chúng ta càng ngày có nhiều khách truy cập hơn.

Về mặt khai thác thông tin thì ... mình chịu. Khi làm website, thiết kế website,  Với mình sử dụng openid từ nhà cung cấp khác để mở rộng vòng tay đón chào khách vào website mình.

Hạn chế:

Chúng ta mất quyền kiểm soát tài khoản, không điều khiển được tài khoản như chúng ta mong muốn

OpenID hoạt động như thế nào?

bạn muốn người dùng đăng nhập vào website http://blog.itnet.vn để gửi bình luận cho bài viết này chẳng hạn. Tuy nhiên, người dùng không có tài khoản thì họ không thể bình luận. Viết 1 chương chương để người dùng đăng ký, đăng nhập thì mất thời gian cho họ quá. Tại sao không sử dụng những tài khoản có sẵn của họ để gửi lời bình.

Người dùng đã có tài khoản gmail, yahoo, facebook, zing, ... họ có thể đăng nhập vào website của chúng ta từ những tài khoản này và gửi lời bình. Rõ ràng công việc đã nhanh hơn rất nhiều.

Công việc người lập trình là gắn kết tài khoản đăng nhập từ các nguồn khác nhau vào website 1 cách chính xác.

Cách hoạt động như sau:

- Chúng ta tìm các nhà cung cấp openid (gmail, yahoo, facebook, zing, ...) tìm hiểu xem họ cho phép đăng nhập và website của họ thông qua 1 cái gọi là openid bằng đường link như thế nào?

- Sau khi đăng nhập vào website họ, thì kết quả trả về ra làm sao? (đăng nhập thành công, hay thất bại). Nếu đăng nhập thành công thì các tham số trả về là gì?

- Khi nhận được tham số trả về từ nhà cung cấp, chúng ta tiếp tục xử lí những công việc còn lại. (Chúng ta có thể lưu thông tin vào CSDL, tạo session để xác nhận là thành viên đã đăng nhập vào website chúng ta)

Nếu bạn muốn trực tiếp thử nghiệm thì có thể gửi lời bình vào phần dưới cùng của bài viết sẽ thấy rõ điều đó.

Ví dụ 1 số trang cung cấp openid

Yahoo: https://me.yahoo.com
Google: https://www.google.com/accounts/o8/id
MyOpenId: http://myopenid.com
MySpace: http://www.myspace.com/username
Wordpress: http://wordpress.com
ALO: http://openid.aol.com

Tạo trang đăng nhập openid bằng php

Đầu tiên bạn phải chắc chắn rằng host của mình hỗ trợ 3 thứ sau:

- cURL
- bcmath
- OpenSSL

Nếu không có đủ thì coi như vứt. Đấy chính là lý do tại sao mình nói host free không hợp với việc dùng openid. Vì không có nhiều host free hỗ trợ đầy đủ 3 thứ này lắm.

Hoặc bạn có thể chạy trực tiếp trên localhost

Tiếp theo bạn cần chọn một thư viện OpenId cho mình tại http://openid.net/developers/libraries/#php

Để cho đơn giản mình sẽ hướng dẫn sài thư viện LightOpenId vì thư viện này đơn giản mà rất dễ dùng.

Vào đây download nhé: http://gitorious.org/lightopenid/lightopenid/trees/master cho khỏi mất công.

Sau khi download về, các bạn sẽ có 2 file là example.phpopenid.php

Các bạn chạy file example.php, nó sẽ hiện lên 1 ô input để nhập dịch vụ mà mình muốn sử dụng

Các bạn nhập link 1 trong các địa chỉ trên vào ô input và nhấn Submit

Sau khi nhập vào (ví dụ như https://me.yahoo.com) thì chúng ta kiểm tra lại và chuyển đến trang đăng nhập của nhà cung cấp dịch vụ đó

Phần kiểm tra URL của nhà cung cấp sẽ được LightOpenId thực hiện khi ra gọi phương thức $openid->authUrl(). Nếu không có gì sai nó sẽ trả lại giá trị là một URL. Đây cũng chính là URL của trang đăng nhập của nhà cung cấp dịch vụ openid mà người dùng yêu cầu. Tất nhiên là url này sẽ khác với URL mà người dùng nhập vào. Quá trình sử lý thế nào để có được URL đó thì chúng ta không cần quan tâm. chỉ cần biết trong url đó có chứa một vài thông tin về yêu cầu của chúng ta như: url trang đăng nhập của ta để sau khi đăng nhập bên phía họ xong thì họ sẽ chuyển (redirect) lại trang của ta, các thông tin ta muốn lấy của người dùng (như email, tên, giới tính, ...), ...

Để có thể yêu cầu lấy các thông tin của người dùng chúng ta thêm code như thế này vào trước khi gọi $openid->authUrl()

$openid->required = array('namePerson/friendly', 'contact/email'); //các thông tin bắt buộc phải lấy
$openid->optional = array('namePerson/first'); // các thông tin tùy chọn, có hay không cũng được

Bạn có thể yêu cầu các thông tin sau:

'namePerson/friendly'     => Tên gọi
'contact/email'           => Email
'namePerson'              => Tên đầy đủ
'birthDate'               => Ngày sinh
'person/gender'           => Giới tính
'contact/postalCode/home' => Mã bưu chính
'contact/country/home'    => Quốc tịch
'pref/language'           => Ngôn ngữ
'pref/timezone'           => Múi giờ<

Chỉ cần nhét các thông tin cần lây vào mảng như code ví dụ trên là được.

Bạn cũng có thể thay đổi địa chỉ URL mà nhà cung cấp sẽ chuyển tới sau khi người dùng đăng nhập và xác nhận trên site của họ bằng cách thêm dòng sau vào trước khi gọi phương thức $openid->authUrl()

$openid->returnUrl = "URL sẽ nhận kết quả";

Lưu ý là URL này phải trên cùng một site với trang gửi yêu cầu đăng nhập đâu nhá.

Tiếp đến là việc người dùng đăng nhập trên site của nhà cung cấp thì ta không can thiệp được

Sau nữa là nhận kết quả từ phía nhà đăng nhập:

Bạn nên biết là sau khi được người dùng của bạn xác nhận rằng sẽ dùng tài khoản của họ để đăng nhập vào site bạn thì nhà cung cấp sẽ đính các thông tin vào chuỗi query string (chính là phần sau dấu ? trên URL) trên URL sẽ nhận kết quả. Cụ thể có một biến quan trọng nhất là $_GET["openid_mode"] (cụ thể trên URL được chuyển tới sẽ có thêm openid_mode=xxxx). Nếu biến này không tồn tại tức là người dùng chưa có kết quả trả về hay người dùng chưa được chuyển đi đăng nhập trên site của nhà cung cấp. Lúc đó ta sẽ chuyển họ đi. Điều này giải thích cho đoạn code:

if(!isset($_GET['openid_mode'])) {
if(isset($_POST['openid_identifier'])) {
$openid = new LightOpenID;
$openid->identity = $_POST['openid_identifier'];
header('Location: ' . $openid->authUrl());
}  
}

Nếu $_GET["openid_mode"] == "cancel" thì tức là người dùng đã hủy bỏ việc đăng nhập trên site của nhà cung cấp dịch vụ openid. Code thông báo việc này là đoạn:

elseif($_GET['openid_mode'] == 'cancel') {
echo 'User has canceled authentication!';

Còn lại đương nhiên là người dùng đã tiến hành đăng nhập rùi. Lúc này ta dùng phương thức $openid->validate() để kiểm tra lại kết quả (vì chỉ có trời mới biết URL hiện tại có phải do người dùng ngụy tạo ra để lừa ta là họ đã đăng nhập rùi không). Quá trình kiểm tra thế nào ta cũng chẳng cần quan tâm. Chỉ cần biết nếu nhận được giá trị true thì thông tin xác nhận ta nhận được là chuẩn xác và ngược lại

else {
$openid = new LightOpenID;
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
}

Cái thuộc tính $openid->identity lúc này sẽ chính là một URL riêng của người dùng do nhà cung cấp dịch vụ của họ cấp cho họ. Ta có thể dùng cái này như một chỉ số ID của họ.

Tiếp theo để lấy được những thông tin mà ta yêu cầu thì chúng ta chỉ cần dùng phương thức $openid->getAttributes(). Nó sẽ trả lại một mảng chứa các thông tin chúng ta yêu cầu. Muốn xem trong mảng đó có những gì thì chỉ việc dùng hàn print_r() mà in ra để xem. Việc đăng nhập cho người dùng vào site của bạn và dùng những thông tin lấy được này như thế nào là việc của bạn, chẳng ai quản được.

Chúc bạn thành công

Bạn thấy bài viết này như thế nào?: 
Average: 10 (2 votes)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Apple

Cổ phiếu của Apple cán mốc 700 USD

Ngay sau thông tin iPhone 5 đã tẩu tán được 2 triệu đơn đặt hàng chỉ trong vòng 24 giờ đồng hồ, cổ phiếu của Apple đã tiếp tục tăng và cán mốc 700 USD/ cổ phiếu.

Google chê Facebook là Social Network đã lỗi thời

Google chê Facebook là Social Network đã lỗi thời

Trong một cuộc phỏng vấn mới đây, một giám đốc điều hành của Google gọi đối thủ Facebook của mình là một mạng xã hội đã lỗi thời và gây phiền nhiễu người sử dụng bằng các quảng cáo.

Hướng dẫn tạo riêng cho bạn 1 tokens trong Drupal 7

Hướng dẫn tạo riêng cho bạn 1 tokens trong Drupal 7

Tokens are a pretty powerful weapon to have in your arsenal, and they actually come in useful a lot if you remember that they're there.

Công ty diệt chuột T&C

 

Diet con trung