用github登录,oauth开发
Tag github, oauth, on by view 8843

最近做的oj项目的网站子项目中要使用到“用github登录”这一功能,也就是oauth,于是研究了一番。

github的oauth验证的过程如下:

用户访问登录验证接入口

https://github.com/login/oauth/authorize?client_id=xxxxxxxxxxxxxxxxxx&scope=user,public_repo     

其中client_id由开发者在github网站上申请,无限制。
registor_github_oauth.png
申请成功后,获取client_id和client_secret
get_github_oauth_id_secret.png

用户访问上面的url之后,github会让其跳转到你预定的url,并且带上code参数,例如

http://oj.duguying.net/oauth/github?code=xxxxxxxxxxxxxxxxxx 
   

然后,开发者可以通过code,client_id以及client_secret这三个参数获取用户的access_token即用户身份标识,请求如下

https://github.com/login/oauth/access_token?client_id=xxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxx&code=xxxxxxxxxxxxxxxxxxx 

这个请求将会返回如下内容 

access_token=xxxxxxxxxxxxxxxxxxxxxxxxx&scope=public_repo%2Cuser&token_type=bearer 

有了access_token之后,只需要通过如下请求就可以获取用户信息

https://api.github.com/user?access_token=xxxxxxxxxxxxxxxxxxxxxxxxx 

返回的信息将会是json格式。注意整个请求过程中都是使用GET请求。只要理解了oauth验证过程,如此就很容易编程实现了。

最后,附上我自己用golang实现的github的oauth验证库https://github.com/gogather/oauth


texlive中文书签乱码
Tag texlive, pdf, 中文, 书签, 乱码, on by view 8197

一个纠结了两天的问题,我之前在ctex环境下的latex项目迁移到texlive环境出现的问题。我之前的项目是gbk编码的,用ctex环境编译,因此,也只能够支持windows环境,故而,我将其转移到了texlive环境编写,字符集也由原来的gbk变为了utf8,这时出现问题了,起初解决书签乱码的方法是在编译过程中将生成的bachelor.out文件的编码由原来的gbk转为unicode,使用的是一个命令行工具gbk2uni.exe,可是现在全部变为utf8格式了out文件也不再是gbk,原来的转换方法无效了,后来也试着吧utf8格式的out文件转为unicode格式,可是还是无效,纠结很久,解决方法如下。

原文档头部如下

\documentclass{article}    
\usepackage{amsmath,amssymb}    
\usepackage{latexsym}    
\usepackage{CJK}    
\usepackage{listings,xcolor}    
\usepackage{graphicx}    
\usepackage{titlesec}    
\usepackage[dvipdfm,    
            pdfstartview=FitH,    
            CJKbookmarks=true,    
            bookmarksnumbered=true,    
            bookmarksopen=true,    
            colorlinks=true, %注释掉此项则交叉引用为彩色边框(将colorlinks和pdfborder同时注释掉)    
            %pdfborder=001,   %注释掉此项则交叉引用为彩色边框    
            citecolor=magenta,% magenta , cyan    
            linkcolor=blue,    
            linktocpage=true,    
            ]{hyperref}       % hyperref 宏包通常要求放在导言区的最后!!!    
\usepackage{titletoc}

修改为

\documentclass{ctexartutf8}
\usepackage{amsmath,amssymb}
\usepackage{latexsym}
\usepackage{CJKutf8}
\usepackage{listings,xcolor}
\usepackage{graphicx}
\usepackage{titlesec}

\usepackage[unicode,dvipdfm,
            pdfstartview=FitH,
            colorlinks=true, %注释掉此项则交叉引用为彩色边框(将colorlinks和pdfborder同时注释掉)
            %pdfborder=001,   %注释掉此项则交叉引用为彩色边框
            citecolor=magenta,% magenta , cyan
            linkcolor=blue,
            linktocpage=true,
            ]{hyperref}       % hyperref 宏包通常要求放在导言区的最后!!!
\usepackage{titletoc}

其中主要是将CJK包改为CJKutf8,另外原来需要开启CJKbookmark=true这些都不要了,当然\documentclass需要改为支持CJKutf8的格式,比如ctexartutf8等。

这个问题的的确确困扰了我至少两天的时间,最终还是在google上搜索错误信息! Argument of \HyPsd@GetTwoBytes has an extra }.找到一封邮件(http://lists.ffii.org/pipermail/cjk/2007-February/001832.html),这才恍然大悟。