Ptt-official-app / Ptt-backend

PTT APP 的後端
BSD 3-Clause "New" or "Revised" License
208 stars 68 forks source link

[BUG] C2-7-4 放入 Access Token 之後, POST /v1/users/{{自己的ID}}/drafts/0 (123 的 base64編碼) 應該要成功 #275

Closed y2468101216 closed 3 years ago

y2468101216 commented 3 years ago

發生了什麼事? / The Problem

放入 Access Token 之後, POST /v1/users/{{自己的ID}}/drafts/0 (123 的 base64編碼) 應該要成功 但出現 panic

2021/08/24 15:18:00 http: panic serving [::1]:52275: runtime error: invalid memory address or nil pointer dereference goroutine 7 [running]: net/http.(conn).serve.func1(0xc0001270e0) /usr/local/Cellar/go/1.16.6/libexec/src/net/http/server.go:1804 +0x153 panic(0x13427e0, 0x15fcda0) /usr/local/Cellar/go/1.16.6/libexec/src/runtime/panic.go:971 +0x499 github.com/Ptt-official-app/Ptt-backend/internal/delivery/http.(Delivery).updateUserDraft(0xc000060b80, 0x140f250, 0xc0002161c0, 0xc00021e500, 0xc0002002df, 0x4, 0xc0002002eb, 0x1) /Users/apple/golangProject/Ptt-backend/internal/delivery/http/route_users.go:452 +0x796 github.com/Ptt-official-app/Ptt-backend/internal/delivery/http.(Delivery).postUserDrafts(0xc000060b80, 0x140f250, 0xc0002161c0, 0xc00021e500, 0xc0002002df, 0x4, 0xc0002002eb, 0x1) /Users/apple/golangProject/Ptt-backend/internal/delivery/http/route_users.go:398 +0x17f github.com/Ptt-official-app/Ptt-backend/internal/delivery/http.(Delivery).postUsers(0xc000060b80, 0x140f250, 0xc0002161c0, 0xc00021e500) /Users/apple/golangProject/Ptt-backend/internal/delivery/http/route_users.go:46 +0x276 github.com/Ptt-official-app/Ptt-backend/internal/delivery/http.(Delivery).routeUsers(0xc000060b80, 0x140f250, 0xc0002161c0, 0xc00021e500) /Users/apple/golangProject/Ptt-backend/internal/delivery/http/route.go:116 +0x476 net/http.HandlerFunc.ServeHTTP(0xc0001983a0, 0x140f250, 0xc0002161c0, 0xc00021e500) /usr/local/Cellar/go/1.16.6/libexec/src/net/http/server.go:2049 +0x44 net/http.(ServeMux).ServeHTTP(0xc000028880, 0x140f250, 0xc0002161c0, 0xc00021e500) /usr/local/Cellar/go/1.16.6/libexec/src/net/http/server.go:2428 +0x1ad net/http.serverHandler.ServeHTTP(0xc00019a0e0, 0x140f250, 0xc0002161c0, 0xc00021e500) /usr/local/Cellar/go/1.16.6/libexec/src/net/http/server.go:2867 +0xa3 net/http.(conn).serve(0xc0001270e0, 0x140f9a0, 0xc000028940) /usr/local/Cellar/go/1.16.6/libexec/src/net/http/server.go:1932 +0x8cd created by net/http.(Server).Serve /usr/local/Cellar/go/1.16.6/libexec/src/net/http/server.go:2993 +0x39b

如何重現 / To Reproduce

curl --location --request POST 'http://localhost:8081/v1/users/test/drafts/0' \ --header 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Mjk4NzQ5NDAsInN1YiI6IlNZU09QIn0.sCR_jp6DM3DenO8F5fWHxNmnlJHi1C5qsrkLrIImzxyjoAvTnocnxxFXm_RWylvAcEuGMxP9rejcvvEaAK4h1A' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'action=update_draft' \ --data-urlencode 'raw=MTIz'

預期的行為 / Expected behavior

成功新增草稿

螢幕截圖 / Screenshots

截圖 2021-08-24 下午3 18 44

備註

C2-7-6 跟 C2-7-7 可能是同樣問題,也許可以一起修正

y2468101216 commented 3 years ago

@PichuChen 我用網路上的 base64 encode 跟你的內容不同,不知是否哪裡不一樣

karta0807913 commented 3 years ago

這是因為 internal/repository/user.go 裡面回傳 nil, nil 所導致的。 不過實做的時候因為 go-bbs 裡面的 DB.WriteUserDraft 有點小問題導致時法被呼叫。 還是其實可以不需要呼叫DB.WriteUserDraft

https://github.com/Ptt-official-app/Ptt-backend/blob/129d864c192660b323c23fda8f35d4368d60f858/internal/repository/user.go#L135-L137

PichuChen commented 3 years ago

@PichuChen 我用網路上的 base64 encode 跟你的內容不同,不知是否哪裡不一樣

可以附上說你得到什麼,然後想得到什麼的範例嗎?我也許知道原因, Base64 有 urlencoded 的變種。

y2468101216 commented 3 years ago

@PichuChen 我用網路上的 base64 encode 跟你的內容不同,不知是否哪裡不一樣

可以附上說你得到什麼,然後想得到什麼的範例嗎?我也許知道原因, Base64 有 urlencoded 的變種。

https://www.base64encode.org/ 我用這個 encode 都可以過