日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

beego 使用github.com/astaxie/beego/session异常问题

發布時間:2023/12/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 beego 使用github.com/astaxie/beego/session异常问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編寫oauth controller代碼:

package controllersimport ("encoding/json""fmt""errors""alertmanager/models""alertmanager/utils/oauth""github.com/astaxie/beego""github.com/astaxie/beego/orm""github.com/astaxie/beego/session" )type OAuthController struct {BaseController }var globalSessions *session.Managerfunc init() {sessionConfig := &session.ManagerConfig{CookieName: "gosessionid",EnableSetCookie: true,Gclifetime: 3600,Maxlifetime: 3600,Secure: false,CookieLifeTime: 3600,ProviderConfig: "./tmp",}globalSessions, _ = session.NewManager("memory", sessionConfig)go globalSessions.GC() }func (c *OAuthController ) OAuthUrl() {data := map[string]interface{}{"oauthUrl": oauth.GetOauthUrl()}c.HandleResult(&data) }func (c *OAuthController ) Login() {code := c.GetString(":code")token, err := oauth.GetAccessToken(code)if err != nil {c.HandleError(err)}user, err := oauth.GetUserInfo(token.AccessToken)if err != nil {c.HandleError(err)}c.SetSession("user", user)data := map[string]interface{}{"user": user}c.HandleResult(&data) }func (c *OAuthController ) Validate() {user := c.GetSession("user")if user == nil {err := fmt.Errorf("%s", "not login")c.HandleError(err)} else {data := map[string]interface{}{"user": user,}c.HandleResult(&data)} }func (c *OAuthController ) Logout() {c.DelSession("user")c.HandleResult(nil) }func (c *OAuthController ) NofityInsertUser() {b := c.Ctx.Input.RequestBodyvar user models.AlertUsererr := json.Unmarshal(b, &user)if err != nil {beego.Error(err)c.HandleError(err)return}// TODOo := orm.NewOrm()_, err = o.Insert(&user)if err != nil {beego.Error(err)c.HandleError(err)return}beego.Info(user)c.HandleResult(nil) }func (c *OAuthController ) BackAdminLogin () {code := c.GetString(":admin")if code == "k8spaas" {var user oauth.Useruser.Name = "admin"user.Role.Name = "admin"c.SetSession("user", user)data := map[string]interface{}{"user": user}c.HandleResult(&data)return}var err_back error = errors.New("error admin password.")c.HandleError(err_back) }

utils/oauth:

package oauthimport ("encoding/json""fmt""net/url""github.com/astaxie/beego""github.com/parnurzeal/gorequest" )var (serverUrl stringserverRedirectUrl stringauthorizePath stringtokenPath stringuserInfoPath stringuserListPath stringresponseType stringscope stringclientId stringclientSecret stringgrantType stringredirectUri stringoauthUrl stringrawTokenUrl stringuserInfoUrl stringuserListUrl string )func init() {serverUrl = beego.AppConfig.String("oauth.server.server_url")serverRedirectUrl = beego.AppConfig.String("oauth.server.redirect_url")authorizePath = beego.AppConfig.String("oauth.path.authorize")tokenPath = beego.AppConfig.String("oauth.path.token")userInfoPath = beego.AppConfig.String("oauth.path.user.info")userListPath = beego.AppConfig.String("oauth.path.user.list")responseType = beego.AppConfig.String("oauth.response_type")scope = beego.AppConfig.String("oauth.scope")clientId = beego.AppConfig.String("oauth.client_id")clientSecret = beego.AppConfig.String("oauth.client_secret")grantType = beego.AppConfig.String("oauth.grant_type")redirectUri = beego.AppConfig.String("oauth.redirect_uri")oauthUrl = serverRedirectUrl + authorizePath +"?response_type=" + responseType +"&scope=" + scope +"&client_id=" + clientId +"&redirect_uri=" + url.QueryEscape(redirectUri)rawTokenUrl = serverUrl + tokenPath +"?client_id=" + clientId +"&client_secret=" + clientSecret +"&grant_type=" + grantType +"&redirect_uri=" + url.QueryEscape(redirectUri)userInfoUrl = serverUrl + userInfoPathuserListUrl = serverUrl + userListPath}func GetOauthUrl() string {return oauthUrl }func GetUserInfo(accessToken string) (User, error) {beego.Info("oauth2.GetUserInfo begin.")request := gorequest.New()var user User_, body, errs := request.Get(userInfoUrl).Set("Authorization", "Bearer "+accessToken).End()if errs != nil {beego.Error(errs[0])return user, errs[0]}fmt.Println(body)err := json.Unmarshal([]byte(body), &user)return user, err }func GetAccessToken(code string) (OauthAccessToken, error) {beego.Info("oauth2.GetAccessToken begin.")tokenUrl := GetTokenUrl(code)request := gorequest.New()var token OauthAccessToken_, body, errs := request.Post(tokenUrl).Set("Accept", "application/json").End()if errs != nil {beego.Error(errs[0])return token, errs[0]}fmt.Println(body)err := json.Unmarshal([]byte(body), &token)return token, err }func GetTokenUrl(code string) string {return rawTokenUrl + "&code=" + code }

types:

package oauthtype OauthAccessToken struct {AccessToken string `json:"access_token"`TokenType string `json:"token_type"`RefreshToken string `json:"refresh_token"`ExpiresIn int `json:"expires_in"`Scope string `json:"scope"` }type Role struct {Name string `json:"name"` }type User struct {Id int `json:"id"`Name string `json:"name"`Email string `json:"email"`Phone string `json:"phone"`Role Role `json:"role"` }

配置文件:

sessionon = true oauth.path.token = /oauth/token oauth.path.authorize = /oauth/authorize oauth.path.user.info = /user/info oauth.path.user.list = /user/info/list oauth.client_id= curl-client oauth.client_secret= client-secret oauth.grant_type= authorization_code oauth.response_type= code oauth.scope= read write[dev]oauth.server.server_url = http://oauth2.abc.sheincorp.cn oauth.server.redirect_url = http://oauth2.abc.sheincorp.cn oauth.redirect_uri = http://localhost:8082/#/OAuth

一定要設置sesstionon = true, 否則調用GetSession() SetSesstion() 方法會有異常。

異常如下:

?Handler crashed with error runtime error: invalid memory address or nil pointer dereference

總結

以上是生活随笔為你收集整理的beego 使用github.com/astaxie/beego/session异常问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。