很多網站提供用微博和 QQ 賬號登錄,好處是什么呢?
![](http://image.woshipm.com/wp-files/img/102.jpg)
小編按:為什么現在多數網站/App 鼓勵第三方社交賬戶登陸?看完這篇來自知乎的技術帖,相信多數童鞋會和小編一樣豁然開朗!
謝邀!8月下旬剛好搞過OAuth。
首先反對目前贊同數超過1的除了我以外的所有回答。
回答下題主本身的問題:很多網站提供用微博和QQ賬號登錄,好處是什么呢?
好處是當你登陸了QQ客戶端或者微博時,用戶可以不輸入賬號密碼直接點擊(無需輸入任何數據)使用綁定的QQ號或微博賬號登陸。這個需求是很大的,我網站設立初期就有很多人要求我添加這個功能。
這個我做過調查,確實很多用戶需要,因為登錄了QQ客戶端,在那些網站就不需要輸入密碼登陸了。沒調查就沒有發言權。
————————————以下為戰斗部分——————————————
1、@Benjamin 提到的 “誘使用戶誤以為不用注冊賬號就能登錄他們的網站了,有利于吸引用戶?!?這個其實QQ互聯官方的要求就是:“點擊登陸后,要直接就是登陸,不能要求設置賬號密碼什么的”,不然無法通過審核,我前期就是這樣無法通過審核,后期在代碼里動了點手腳才過的,審核通過后又改了回去。
設置昵稱這個前期小小麻煩,以后的還是會很方便的,畢竟以后就不用再輸入了。 2、@DecKen 的說法,“所謂的使用微博和QQ賬號登陸,無非是網站想獲取你更多的信息(QQ號,微博)”,也是錯誤的。OAuth協議返回給接通微博登陸或者QQ登陸的網站的登陸數據,只有一串可以叫做openid的字符串,并沒有QQ賬號,當然你可以拿著openid等數據繼續通過騰訊的OpenAPI繼續獲取更多資料(JSON格式),例如昵稱什么的,但是還是沒有QQ號。例如get_user_info的API,只能取得如下數據。 { “ret”:0, “msg”:””, “nickname”:”Peter”, “figureurl”:”http://qzapp.qlogo.cn/qzapp/111111/ 942FEA70050EEAFBD4DCE2C1FC775E56/30″, “figureurl_1″:”http://qzapp.qlogo.cn/qzapp/111111/ 942FEA70050EEAFBD4DCE2C1FC775E56/50”, “figureurl_2″:”http://qzapp.qlogo.cn/qzapp/111111/ 942FEA70050EEAFBD4DCE2C1FC775E56/100”, “figureurl_qq_1″:”http://q.qlogo.cn/qqapp/100312990/ DE1931D5330620DBD07FB4A5422917B6/40”, “figureurl_qq_2″:”http://q.qlogo.cn/qqapp/100312990/ DE1931D5330620DBD07FB4A5422917B6/100”, “gender”:”男”, “is_yellow_vip”:”1″, “vip”:”1″, “yellow_vip_level”:”7″, “level”:”7″, “is_yellow_year_vip”:”1″ } 基本只有昵稱、各種尺寸的頭像的URL,性別,黃鉆相關的信息。 另外其實我很奇怪知乎很多完全沒有網站開發經驗的人也來回答這種問題。 以下為我QQ登陸數據表所儲存數據,可以看到我只保存了openid,并沒有QQ號,不是不想保存,是沒有API可以獲取到這種資料。 openid每個用戶各不相同,有一一對應的關系。但是同一用戶,不同的appid獲取到的OpenID是不同。因此是無法通過openid逆向工程得出QQ號的。 當然,新浪微博的API權限就高很多了,甚至可以用那些API,做出Fuubo這樣的東西,所以獲取微博的地址是可以辦到的。當然,這也是合理的,因為微博的定位就是微型博客,博客不同于QQ、手機號碼這樣的私人聯系方式,博客在不作隱私設置的前提下對網絡上的任何人都是公開的,因此獲得新浪微博的地址并無任何不妥。 像我的新浪微博地址:http://weibo.com/lincanbin 我就可以非常大方地放出來讓你們關注。 3、所以@段煉 的說法,也是錯誤的,OAuth協議只返回openid,并不返回登陸密碼。 4、@安雅 的“直接引入原qq好友關系”這個功能是不存在的。 5、@VrWorking 的關于移動終端登陸的說法(原文:“如果在手機或平板客戶端 App,就比較難了。因為 App 的特點你是看不到地址欄的,因此無法確認這個登錄頁面是不是騰訊的。只能看這個 App 是否是官方的,和是否具備足夠的知名度。滿足這兩個條件下的 App 開發商不會、也沒必要去偷取你的賬戶信息(也不絕對,比如 CSDN 腦殘程序員偷偷的保存用戶密碼明文到數據庫,結果城門失火殃及池魚)。”),其實騰訊是有另一個API,可以調用QQ客戶端登陸的,并非只有Webview一個方法。不過目前這個只支持安卓和IOS,WP等小眾系統是不支持的,如下圖: 單點登錄(Single Sign On) 使用了這個API的,大家比較熟悉的就有“天天愛消除”、“唱吧”等等,不需要使用WebView跳轉到一個網頁手動輸入賬號密碼登陸,也是非常方便的。不過SSO登陸這個API會啟動QQ客戶端,響應在一些手機上相對比WebView較遲緩。 6、@癡夢 說的“又當又立”,也是錯誤的說法,首先騰訊的QQ互聯要求(即“登陸后不需添加任何新的即可直接登陸”)只適用于留言板等應用,而論壇之類的應用,并不適合。 像各位想保護隱私嘛,所以騰訊返回給與QQ互聯互通網站的信息也是有限的,有用的只有一個opedid和name(昵稱)??墒钦搲癁榱藚^分各個用戶,必須有identifie,對外展示,所以至少需要再設定一個昵稱??墒且粋€擁有多套登陸系統(必須有多套,最起碼自己得有一套,不然就喪失獨立性了)的網站,把Openid作為mainkey顯然是不合適的,name的話更不用說,是絕對不能作為identifie的——因為有含有非法字符或者過長的可能性,也可能重復,有的網站也有提供UID登陸或者郵箱地址登陸的功能,如果直接把QQ昵稱作為username入庫,就可能導致該用戶通過常規途徑登陸失敗。 簡言:把騰訊返回的name作為username入庫前需要做合法性檢測,所以用戶名是必須在登陸后再次填寫的。除非你打算全站只用QQ這個登陸系統,而不采用自己獨立的賬號系統。 (合法性檢測:長度,不能全為數字,不包含非法字符,數據庫user表同字段中不存在相同數據。) 當然,有些網站像知乎,是允許使用已存在的name的并且可以任意修改的,像我叫林燦斌,你也可以在知乎注冊個號叫林燦斌,你QQ昵稱是林燦斌,用QQ登陸后知乎自動幫你創建一個name是林燦斌的號,這樣的網站邏輯就可以不輸入新昵稱直接登陸。而大多數網站,像大部分論壇、微博……name都必須是唯一的,這樣就不可能實現直接登陸,有些是歷史遺留問題,有些是本意如此。 最后按照知乎答非所問的風氣,最后應該會有人出來普及OAuth協議然后獲得高票贊同吧,建議那些并沒有相關經驗的回答者等那種普及知識的回答出現并且看完再作答。 ———————————————————————— 最后,其實QQ的審核規定還是挺嚴格的,不過QQ旗下的Discuz是不需要遵照這個規定的。 因此很多使用DIscuz的論壇,都這樣,造成了混亂,與騰訊本意相違,這里抄送騰訊反省一下。 ———————————————————————— 另外還是有好網站的,像我的網站,用QQ或者微博登陸,只需要設置一個在我站顯示的昵稱(原因見第6條),并不需要設置密碼(當然也在設置里提供了設置密碼的選項)。 那些讓那么多人罵娘的網站,多數是采用了一家不遵守騰訊QQ互聯規定的公司旗下的Discuz的程序。 另外OAuth只是方便下次登錄,我覺得注冊時設置賬號密碼的設計對于站長來說還是必要的,防止上了賊船下不來,例如: 萬一Google公司在國內一夜暴斃,那用Google賬號登陸而沒要求用戶設置登陸賬號密碼的網站,那部分用戶豈不是無法再次登陸?(讓我們看看2011年出現在知乎的一條問題:將網站的登錄系統切換到完全使用Google Account OAuth登錄,利弊各是什么?) 萬一某某公司和你是競爭對手,看你做大了眼紅,把你Oauth接口權限關閉而你站又沒要求用戶設置登陸賬號密碼的網站,那部分用戶豈不是無法再次登陸? 萬一…… 來源:PMTOO ?作者:林燦斌
呵呵,學習了