第三方账号登录设计

现在很多应用都会提供第三方账号登录功能。我记得这个功能出现最早的时候大约是 twitter 兴起的时候。其实在这之前有  openid 的方案,不过没有推广开来,最终随着 twitter facebook 等网站用户量的暴涨顺手做了 openid 的事情。

第三方账号登录设计的初衷是要解决注册成本问题。这里面包含两方面,一是注册一般需要填写的内容比较多,比如用户名、邮箱、性别等等,有的甚至到了变态的地步。另一方面是密码管理的问题,就是用户每次注册都要填一个密码,所有网站用一个密码又要面临安全风险。

采用了第三方账号登录以后,用户无需填写繁琐的个人信息。只需要授权一下,应用方就可以获取到对应的必要注册信息,同时用户也无需设置密码。

刚开始的时候对用户和应用方来说一切都挺美好。但是用户不是绝对集中,也就是不存在一个平台包含所有用户。所以应用方不得不接入不同的第三方,比如微信、QQ、微博等。这样慢慢就产生了新的问题,用户很容易在同一应用方产生不止一个账号。

一般有以下几个解决方案

  1. 用户用第三方账号登录以后,让用户再绑定应用方的账号。这样用户就可以把不同的第三方账号绑定到同一应用账号,从而避免了多账号的问题。但是这样就违背了第一个初衷(简化注册流程)
  2. 折中的方案,不需要显示的绑定账号,但是需要绑定手机号。和第一种方法对比,没有本质的改变。
  3. 就是如下图QQ音乐这样,提示用户上次是用的那种登录方式,这种方案成本收益较高。

完美方案不存在,需要持续进化…

十一长假要结束了

今年国庆节没有出去玩,在家里做做饭,看看球,其实挺好的,比在景区看后脑勺好多了。

国庆期间发生了不少事:彭斯怼中国;美股大跌;学会了做红烧鱼。。。

Golang中空字符表示

空字符(Null character)又称结束符,缩写NUL,是一个数值为0的控制字符。在C语言中空字符用来表示字符串的结束。

在C语言中也可以直接插入空字符:


#include
int main(void)
{
puts("hello\0world");
}

但是在Go中,类似的代码是不行的:

package main
import "fmt"
func main(){
fmt.Println("hello\0world")
}
//print: /tmp/g.go:4: non-octal character in escape sequence: w

查看文档:https://golang.org/ref/spec#String_literals

修改一下即可:

package main
import "fmt"
func main(){
fmt.Println("hello\000world")
}

终于拿到驾照啦

从3月22日到昨天(7月10),历时三个半月终于拿到驾照了 🙂 。

不得不说工作之后再学车,真是一个磨人的事情。之前本来打算上学的时候就把驾照拿下的,因为毕业的事情耽搁啦。这其中也有自己拖延症的原因,有些事情还是早作早完成的好啊。

学车前就听说驾校的教练各种变态。自己亲身体验之后,真是一肚子泪。有些教练确实相当不负责任,而且态度蛮横恶劣。我这次就遇到了几个,幸亏后来的几个教练都非常好。要不然自己很难顺利的拿到驾照不说,也学不到啥东西。

整个考试过程还是挺顺利的。就考科目二的时候自己异常紧张,也许是因为自己长时间没有参加过像样的考试了。不过紧张都是考试前,一旦上了考场也就没那么紧张了。最终科目二还考了个满分 🙂 。

开车其实是一件需要非常认真和高度集中精力的事情。无论驾校和教练怎样,自己在学习的时候一定要认真仔细。把该掌握的都掌握,好好练习驾驶技能。教练提醒的地方一定要认真记好,最好能够理解避免死记硬背。

虽然拿到驾照了,但是其实整个学习的过程都是以拿驾照为目的的,其实驾驶技能只能说是掌握了。从一个门外汉变成了一只菜鸟而已,以后需要学习的东西还多着呢。。。