第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 AWS Lambda 中創(chuàng)建身份驗(yàn)證中間件

如何在 AWS Lambda 中創(chuàng)建身份驗(yàn)證中間件

Go
慕的地6264312 2023-05-04 17:01:20
我正在使用 AWS Cognito 對(duì)我的用戶進(jìn)行身份驗(yàn)證,一旦通過身份驗(yàn)證,他們就可以調(diào)用我的 API (API Gateway + Lambda)。我正在使用無服務(wù)器框架完成所有這些工作。一旦通過身份驗(yàn)證,當(dāng)他們調(diào)用需要此身份驗(yàn)證的端點(diǎn)時(shí),我的 lambda 將通過request.RequestContext.Authorizer["claims"]. 我有創(chuàng)建一個(gè)身份驗(yàn)證中間件以將當(dāng)前用戶注入上下文的想法。但我確定我做錯(cuò)了什么(或者可以改進(jìn))。怎么運(yùn)行的:我的 lambda.go:package mainimport (    "context"    "github.com/aws/aws-lambda-go/events"    "github.com/aws/aws-lambda-go/lambda"    "github.com/company/api/middlewares")func Handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {    fmt.Println(ctx.user)    return events.APIGatewayProxyResponse{}, nil}func main() {    lambda.Start(        middlewares.Authentication(Handler),    )}中間件/authentication.gopackage middlewaresimport (    "context"    "github.com/aws/aws-lambda-go/events"    "github.com/company/api/models")func Authentication(next func(context.Context, events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error)) func(context.Context, events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {    var user models.User    return func(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {        claims := request.RequestContext.Authorizer["claims"]        // Find user by claims properties.        if err := user.Current(claims); err != nil {            return events.APIGatewayProxyResponse{}, err        }        ctx.user = user        return next(ctx, request)    }}型號(hào)/user.go:package modelsimport (    "github.com/jinzhu/gorm"    "github.com/mitchellh/mapstructure")type User struct {    gorm.Model    // Override ID cause we are using cognito.    Email string `gorm:"primary_key,not null"`    Site  Site}我有兩個(gè)問題:這是定義接收函數(shù)并返回另一個(gè)函數(shù)的函數(shù)(身份驗(yàn)證函數(shù))的正確方法嗎?因?yàn)樗唛L了,我覺得這是錯(cuò)誤的。有沒有辦法增加ctx一個(gè)user屬性?我正在嘗試的方式,我看到了錯(cuò)誤ctx.user undefined (type context.Context has no field or method user)。
查看完整描述

1 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

關(guān)于使用中間件的第一個(gè)問題:

這種方法當(dāng)然沒有錯(cuò)。如果您定義函數(shù)類型并使用定義的名稱,函數(shù)看起來可能會(huì)好一些。net/http做同樣的事情HandlerFunc

type?HandlerFunc?func(ResponseWriter,?*Request)

這將使中間件的簽名更加合理:

func?AuthMiddleware(nextHop?HandlerFunc)?HandlerFunc

編輯:lambda 庫沒有為函數(shù)簽名定義這樣的類型嗎?我希望有一個(gè)存在。

另外我不知道后綴Middleware在你的情況下是否有意義,但我認(rèn)為一些后綴應(yīng)該對(duì)你有意義,以便為函數(shù)名稱提供更多上下文并使其更易于理解。AuthenticationMiddleware可能是一個(gè)例子。

編輯:剛剛看到包名。LGTM 真的。

第二個(gè)問題:

還有一個(gè)常見的陷阱:context.WithValue返回要使用的新上下文。因此,您不應(yīng)期望傳遞的參數(shù)上下文發(fā)生變化,而應(yīng)使用返回的新參數(shù)上下文。


查看完整回答
反對(duì) 回復(fù) 2023-05-04
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)