1. 程式人生 > >gin、xorm、jwt實現的使用者登入驗證

gin、xorm、jwt實現的使用者登入驗證

jwt認證就是使用者註冊之後, 伺服器生成一個 JWT token返回給瀏覽器, 瀏覽器向伺服器請求資料時將 JWT token 發給伺服器, 伺服器用 signature 中定義的方式解碼 。

安裝:go get github.com/dgrijalva/jwt-go

           go get github.com/dgrijalva/jwt-go/request

main.go

packagemain
import(
"data"
"fmt"
"net/http"
"github.com/dgrijalva/jwt-go"
"github.com/dgrijalva/jwt-go/request"
"gopkg.in/gin-gonic/gin.v1"
)
funcmain(){
router:=gin.Default()
router.POST("/customer/register",data.Register)
router.POST("/login",data.Login)
//新增群組中介軟體
authorized:=router.Group("/user",MyMiddelware())
authorized.POST("/info",func(c*gin.Context){
c.String(http.StatusOK,"info")
})
router.Run(":8080")
}
funcMyMiddelware()gin.HandlerFunc{
returnfunc
(c*gin.Context){
token,err:=request.ParseFromRequest(c.Request,request.AuthorizationHeaderExtractor,
func(token*jwt.Token)(interface{},error){
return[]byte("mobile"),nil
})
iferr==nil{
iftoken.Valid{
c.Next()
}else{
c.String(http.StatusUnauthorized,"Tokenisnotvalid")
}
}else{
c.String(http.StatusUnauthorized,"Unauthorized
accesstothisresource")
}
}
}

data.go

packagedata
import(
"encoding/json"
"fmt"
"net/http"
"gopkg.in/gin-gonic/gin.v1"
_"github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
)
varDb*xorm.Engine
funcinit(){
varerrerror
//開啟資料庫
//DSN資料來源字串:使用者名稱:密碼@協議(地址:埠)/資料庫?引數=引數值
Db,err=xorm.NewEngine("mysql","yuanye:[email protected](127.0.0.1:3306)/wemai?charset=utf8")
iferr!=nil{
fmt.Println(err)
}
Db.ShowSQL(true)
err=Db.Sync2(new(Customer),new(Goods),new(CustomerInfo))
}
funcJsonResponse(codeint,datainterface{})string{
response:=make(map[string]interface{})
response["code"]=code
response["data"]=data
js,err:=json.Marshal(response)
iferr!=nil{
returnerr.Error()
}
returnstring(js)
}
funcRegister(c*gin.Context){
username:=c.PostForm("username")
password:=c.PostForm("password")
user:=Customer{
Username:username,
Password:password,
}
c.String(http.StatusOK,user.Register())
}
funcLogin(c*gin.Context){
username:=c.PostForm("username")
password:=c.PostForm("password")
user:=Customer{
Username:username,
Password:password,
}
c.String(http.StatusOK,user.Login())
}

Customer.go

packagedata
import(
"time"
"github.com/dgrijalva/jwt-go"
)
typeCustomerstruct{
Idint`xorm:"pkautoincr"`
Usernamestring`xorm:"indexuniquenotnull"`
Passwordstring`xorm:"notnull"`
CreatedAttime.Time`xorm:"created"`
}
func(c*Customer)Register()string{
Db.Insert(c)
has,_:=Db.Get(c)
ifhas{
returnJsonResponse(0,"註冊成功")
}else{
returnJsonResponse(1,"註冊失敗")
}
}
func(c*Customer)Login()string{
has,_:=Db.Get(c)
ifhas{
returnJsonResponse(0,setToken())
}else{
returnJsonResponse(1,"登入失敗")
}
}
funcsetToken()string{
token:=jwt.New(jwt.SigningMethodHS256)
claims:=make(jwt.MapClaims)
claims["exp"]=time.Now().Add(time.Hour*time.Duration(1)).Unix()
claims["iat"]=time.Now().Unix()
token.Claims=claims
tokenString,err:=token.SignedString([]byte("mobile"))
iferr!=nil{
return""
}
returntokenString
}

程式碼結構


執行效果:


登入失敗時的效果:

登入成功,返回token

帶token請求user/info介面


當不帶token時,返回錯誤資訊


相關推薦

ginxormjwt實現的使用者登入驗證

jwt認證就是使用者註冊之後, 伺服器生成一個 JWT token返回給瀏覽器, 瀏覽器向伺服器請求資料時將 JWT token 發給伺服器, 伺服器用 signature 中定義的方式解碼 。安裝:go get github.com/dgrijalva/jwt-go    

golang簡單實現jwt驗證(beegoxormjwt)

程式目錄結構 簡單實現,使用者登入後返回一個jwt的token,下次請求帶上token請求使用者資訊介面並返回資訊。 app.conf檔案內容(可以用個beego直接讀取裡面的內容)寫的是一個jwt的secretkey jwtkey="12345678" config.json裡面儲存

利用SQLite資料庫進行使用者名稱密碼的註冊和登入驗證

利用SQLite資料庫進行儲存使用者名稱、密碼等等其他資訊 首先是activity_main佈局介面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln

分享知識-快樂自己:註冊使用者密碼加密登入驗證及許可權驗證

***********************以下內容僅作為參考使用:********************************* 1、使用者註冊時,將使用者設定的密碼加密後存入資料庫中(顯然密碼不能簡單地用md5加密一次或者乾脆不加密,這些都是會暴露使用者隱私的,甚至是觸動使用者的利益): 加密密

Session (簡介相關方法流程解析登入驗證)

Session簡介 Session的由來 Cookie雖然在一定程度上解決了“保持狀態”的需求,但是由於Cookie本身最大支援4096位元組,以及Cookie本身儲存在客戶端,可能被攔截或竊取,因此就需要有一種新的東西,它能支援更多的位元組,並且他儲存在伺服器,有較高的安全性。這就是Session。

CAS單點登入-客戶端整合(shirospringbootjwtpac4j)(十)

CAS單點登入-客戶端整合(shiro springboot jwt pac4j)(十) 由於我們通常在業務上會有以下的使用場景: 移動端通過業務系統鑑權 移動端免登入(登入一次以後) 解決方案: JWT(token認證方案) OAuth(第三方認

5Apche配置登入驗證.

Apche配置登入驗證 Apache我們安裝下來後,任何人可以通過ip或者域名進行登入的。這是很不安全的,所以我們這裡來簡單的設定一下使用者認證功能。 一、使用者授權限制: 1、建立使用者認證資料檔案: [[email protected] ~]

Django學習筆記4 使用者註冊和身份驗證登入登出註冊

1. 使用者註冊和身份驗證 1.建立另一個應用程式users 在專案中新建users python manage.py startapp users 新增應用到settings.py中的INSTALLED_APPS列表中 INSTALLED_APP

SpringMVC登入註冊驗證

想要實現以下效果:首先jsp前臺頁面<body style="margin:150px 0 0 600px"> <!-- Panel面板 data-options 英文為:屬性 iconCls : string 設定一個16x16圖示的CSS類ID顯

session和cookie的使用方法區別,和分別實現驗證登入狀態

使用方法:1、建立cookie,setcookie(string name, string value, int expire , string path,  string domain, bool secure);

Yii之登入登出驗證授權理解

驗證Authentication的目的是驗證某個使用者是否就是他聲稱的那個使用者,常見的就是 使用者名稱+密碼 來確認使用者身份,通過更復雜的程式設計,可以實現其它的身份確認方法 授權Authorization就是對於身份明確的(即已經過“驗證”這一步的)使用者檢查他是否允

Asp.Net Core 3.1 學習4Web Api 中基於JWT的token驗證及Swagger使用

1、初始JWT 1.1、JWT原理        JWT(JSON Web Token)是目前最流行的跨域身份驗證解決方案,他的優勢就在於伺服器不用存token便於分散式開發,給APP提供資料用於前後端分離的專案。登入產生的 token的專案完全可以獨立與其他專案。當用

SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇(五): 資料表設計使用 jwtredissms 工具類完善註冊登入邏輯

(1) 相關博文地址: SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(一):搭建基本環境:https://www.cnblogs.com/l-y-h/p/12930895.html SpringBoot + Vue + ElementUI 實現後臺管理系統模板

QQ手機號微信身份證郵箱正則驗證

blog pre 前綴 highlight var logs clas brush test QQ正則驗證 查了下,現在QQ的長度最長是10位數,驗證格式為不以0開頭的5-10位數字就可以了 var reg = /^[1-9]\d{4,9}$/; reg.test(‘01

正則驗證 只能輸入中文數字字母 2-10個字符之間

正則驗證 只能輸入中文、數字、字母 2-10個字符之間var reg = /([u4e00-u9fa5\dA-Za-z]){2,10}/; //這個表達式有一些特殊字符 比如@ 是可以驗證通過的實際操作後發現下面正則表達式普通字母、數字已經隱含了不包括特殊符號所以下面包含普通字母、數字的正則表達是

沫沫金原創提供:完整的根據身份證獲取省份性別年齡生日及頁面驗證

數字 部分 ast script cit key oot test log 概述: 身份證的校驗,識別,分離,處處可見。最近H5移動端的項目就需要掃碼獲取身份證,根據身份證自動識別省份、性別、年齡、生日信息。這裏分享完善版,希望大家喜歡。 環境: 依賴jQuery、Boot

Java:驗證在類繼承過程中equals() hashcode()toString()方法的使用

red ger 輸出 ria oid nag println manage base 以下通過實際例子對類創建過程匯中常用的equals()、hashcode()、toString()方法進行展示,三個方法的創建過程具有通用性,在項目中可直接改寫。 //通過超類Employ

Flask10 登錄模塊表單框架表單渲染表單驗證bookie請求之前鉤子g對象編寫裝飾器

data 函數實現 https tid 路徑 錯誤 post請求 字符 als from flask import Flask from flask import request from flask import render_template from flask_

validate針對checkboxradioselect標簽的驗證

成功 blank sele form 賦值 示例代碼 字母 parent appendto jquery.validate 是jquery的一個插件,用來輔助開發者在客戶端方便快捷的實現表單驗證,最終達到提高用戶體驗的目的。 示例代碼 <form id="fo

rpm安裝升級查詢與安全驗證

a13 type 安裝包 所有 技術分享 ffffff fff pro 軟件 安裝: rpm -ivh 軟件包 升級: rpm -Uvh 軟件包 查詢:a. 查詢所有安裝的軟件包: rpm -qa b. 查詢安裝包的詳細信息: rpm -qi nginx c.