From d1c2c86a1566b1fa89199e115d8a938e0312cef0 Mon Sep 17 00:00:00 2001 From: astaxie Date: Mon, 14 Jan 2013 16:51:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E7=9A=84=E4=B9=A6=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 14.4.md | 222 +++++++++++++++++++++++++++++++++++++++- 14.7.md | 1 + images/14.4.github.png | Bin 0 -> 9795 bytes images/14.4.github2.png | Bin 0 -> 26099 bytes images/14.4.github3.png | Bin 0 -> 24078 bytes 5 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 images/14.4.github.png create mode 100644 images/14.4.github2.png create mode 100644 images/14.4.github3.png diff --git a/14.4.md b/14.4.md index a11457d2..13a68c1b 100644 --- a/14.4.md +++ b/14.4.md @@ -14,6 +14,39 @@ beego目前没有针对这三种方式进行任何形式的集成,但是可以 下面代码演示了如何把这个库引入beego中从而实现认证: + package controllers + + import ( + "github.com/abbot/go-http-auth" + "github.com/astaxie/beego" + ) + + func Secret(user, realm string) string { + if user == "john" { + // password is "hello" + return "$1$dlPL2MqE$oQmn16q49SqdmhenQuNgs1" + } + return "" + } + + type MainController struct { + beego.Controller + } + + func (this *MainController) Prepare() { + a := auth.NewBasicAuthenticator("example.com", Secret) + if username := a.CheckAuth(this.Ctx.Request); username == "" { + a.RequireAuth(this.Ctx.ResponseWriter, this.Ctx.Request) + } + } + + func (this *MainController) Get() { + this.Data["Username"] = "astaxie" + this.Data["Email"] = "astaxie@gmail.com" + this.TplNames = "index.tpl" + } + +上面代码利用了beego的prepare函数,在执行之前调用了认证函数,我们可以看到非常容易的就实现了http auth,digest的认证也是同样的原理。 ## oauth和oauth2的认证 oauth和oauth2是目前比较流行的两种认证方式,还好第三方有一个库实现了这个认证,但是是国外实现的,没有QQ、微博之类的国内应用认证集成: @@ -22,9 +55,196 @@ oauth和oauth2是目前比较流行的两种认证方式,还好第三方有一 下面代码演示了如何把该库引入beego中从而实现oauth的认证,这里以github为例演示: - +1. 添加两条路由 + beego.RegisterController("/auth/login", &controllers.GithubController{}) + beego.RegisterController("/mainpage", &controllers.PageController{}) + +2. 然后我们处理GithubController登陆的页面: + + package controllers + + import ( + "github.com/astaxie/beego" + "github.com/bradrydzewski/go.auth" + ) + + const ( + githubClientKey = "a0864ea791ce7e7bd0df" + githubSecretKey = "a0ec09a647a688a64a28f6190b5a0d2705df56ca" + ) + + type GithubController struct { + beego.Controller + } + + func (this *GithubController) Get() { + // set the auth parameters + auth.Config.CookieSecret = []byte("7H9xiimk2QdTdYI7rDddfJeV") + auth.Config.LoginSuccessRedirect = "/mainpage" + auth.Config.CookieSecure = false + + githubHandler := auth.Github(githubClientKey, githubSecretKey) + + githubHandler.ServeHTTP(this.Ctx.ResponseWriter, this.Ctx.Request) + } + + +3. 处理登陆成功之后的页面 + + package controllers + + import ( + "github.com/astaxie/beego" + "github.com/bradrydzewski/go.auth" + "net/http" + "net/url" + ) + + type PageController struct { + beego.Controller + } + + func (this *PageController) Get() { + // set the auth parameters + auth.Config.CookieSecret = []byte("7H9xiimk2QdTdYI7rDddfJeV") + auth.Config.LoginSuccessRedirect = "/mainpage" + auth.Config.CookieSecure = false + + user, err := auth.GetUserCookie(this.Ctx.Request) + + //if no active user session then authorize user + if err != nil || user.Id() == "" { + http.Redirect(this.Ctx.ResponseWriter, this.Ctx.Request, auth.Config.LoginRedirect, http.StatusSeeOther) + return + } + + //else, add the user to the URL and continue + this.Ctx.Request.URL.User = url.User(user.Id()) + this.Data["pic"] = user.Picture() + this.Data["id"] = user.Id() + this.Data["name"] = user.Name() + this.TplNames = "home.tpl" + } + +整个的流程如下,首先打开浏览器输入地址: + +![](images/14.4.github.png?raw=true) + +然后点击链接出现如下界面: + +![](images/14.4.github2.png?raw=true) + +然后点击Authorize app就出现如下界面: + +![](images/14.4.github3.png?raw=true) ## 自定义认证 +自定义的认证一般都是和session结合的验证的,如下代码来源于一个基于beego的开源博客: + + + //登陆处理 + func (this *LoginController) Post() { + this.TplNames = "login.tpl" + this.Ctx.Request.ParseForm() + username := this.Ctx.Request.Form.Get("username") + password := this.Ctx.Request.Form.Get("password") + md5Password := md5.New() + io.WriteString(md5Password, password) + buffer := bytes.NewBuffer(nil) + fmt.Fprintf(buffer, "%x", md5Password.Sum(nil)) + newPass := buffer.String() + + now := time.Now().Format("2006-01-02 15:04:05") + + userInfo := models.GetUserInfo(username) + if userInfo.Password == newPass { + var users models.User + users.Last_logintime = now + models.UpdateUserInfo(users) + + //登录成功设置session + sess := globalSessions.SessionStart(this.Ctx.ResponseWriter, this.Ctx.Request) + sess.Set("uid", userInfo.Id) + sess.Set("uname", userInfo.Username) + + this.Ctx.Redirect(302, "/") + } + } + + //注册处理 + func (this *RegController) Post() { + this.TplNames = "reg.tpl" + this.Ctx.Request.ParseForm() + username := this.Ctx.Request.Form.Get("username") + password := this.Ctx.Request.Form.Get("password") + usererr := checkUsername(username) + fmt.Println(usererr) + if usererr == false { + this.Data["UsernameErr"] = "Username error, Please to again" + return + } + + passerr := checkPassword(password) + if passerr == false { + this.Data["PasswordErr"] = "Password error, Please to again" + return + } + + md5Password := md5.New() + io.WriteString(md5Password, password) + buffer := bytes.NewBuffer(nil) + fmt.Fprintf(buffer, "%x", md5Password.Sum(nil)) + newPass := buffer.String() + + now := time.Now().Format("2006-01-02 15:04:05") + + userInfo := models.GetUserInfo(username) + + if userInfo.Username == "" { + var users models.User + users.Username = username + users.Password = newPass + users.Created = now + users.Last_logintime = now + models.AddUser(users) + + //登录成功设置session + sess := globalSessions.SessionStart(this.Ctx.ResponseWriter, this.Ctx.Request) + sess.Set("uid", userInfo.Id) + sess.Set("uname", userInfo.Username) + this.Ctx.Redirect(302, "/") + } else { + this.Data["UsernameErr"] = "User already exists" + } + + } + + func checkPassword(password string) (b bool) { + if ok, _ := regexp.MatchString("^[a-zA-Z0-9]{4,16}$", password); !ok { + return false + } + return true + } + + func checkUsername(username string) (b bool) { + if ok, _ := regexp.MatchString("^[a-zA-Z0-9]{4,16}$", username); !ok { + return false + } + return true + } + +有了用户登陆和注册之后,其他模块的地方可以增加如下这样的用户是否登陆的判断: + + func (this *AddBlogController) Prepare() { + sess := globalSessions.SessionStart(this.Ctx.ResponseWriter, this.Ctx.Request) + sess_uid := sess.Get("userid") + sess_username := sess.Get("username") + if sess_uid == nil { + this.Ctx.Redirect(302, "/admin/login") + return + } + this.Data["Username"] = sess_username + } ## links * [目录]() diff --git a/14.7.md b/14.7.md index da52dc27..0b31a314 100644 --- a/14.7.md +++ b/14.7.md @@ -1,4 +1,5 @@ # 14.7 小结 +这一章主要阐述了如何基于beego框架进行扩展,这包括静态文件的支持,静态文件主要讲述了如何利用beego进行快速的网站开发,利用bootstrap搭建漂亮的站点,第二小结讲解了如何在beego中集成sessionManager,方便用户在利用beego的时候快速的使用session,第三小结介绍了表单和验证,基于Go语言的struct的定义使得我们在开发Web的过程中从重复的工作中解放出来,而且加入了验证之后可以尽量做到数据安全,第四小结介绍了用户认证,用户认证主要有三方面的需求,http basic和http digest认证,第三方认证,自定义认证,第三章通过代码演示了如何利用现有的第三方包实现这写认证。 ## links * [目录]() diff --git a/images/14.4.github.png b/images/14.4.github.png new file mode 100644 index 0000000000000000000000000000000000000000..4da4c6f5d67f3cfb69cdfc492712ab0003a4a69b GIT binary patch literal 9795 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 literal 0 HcmV?d00001 diff --git a/images/14.4.github3.png b/images/14.4.github3.png new file mode 100644 index 0000000000000000000000000000000000000000..e98768c3ee8d6d0f3eedbbf81713f71f29950654 GIT binary patch literal 24078 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 Swd^eb^(e}!%2Z03hW-yG&sXLE literal 0 HcmV?d00001