[學習心得][Golang] 如何透過 Golang 開發 OAuth2 的 PKCE - 以 LINE Login 為例

前言: 在 2021/04/09 的新聞上, LINE Login 支持了 PKCE (Proof Key for Code Exchange) 的流程。 本篇文章將清楚地解釋一下,什麼是 LINE Login ? 為何 LINE Login 需要支持 PKCE ? 最後會透過一個範例,帶領著讀者們一起來導入與體驗 LINE Login with PKCE 。 其中本篇文章的程式碼分為三個部分,以下快速說明: LINE Login Go SDK: Github: github.com/kkdai/line-login-sdk-go LINE Login Starter: GitHub: github.com/kkdai/line-login-go LINE Login PKCE Starter: GitHub: github.com/kkdai/line-login-pkce-go TL;DR 本篇文將要介紹以下一些的部分: 什麼是 LINE Login? 什麼又是 OAuth ? 什麼樣的情況會建議使用 LINE Login? LINE Login 的流程 OAuth2 有什麼樣的缺點? 什麼是 PKCE? 如何在 LINE Login 之中導入 PKCE? 結論 參考文章 什麼是 LINE Login? 什麼又是 OAuth 2.0 ? 許多的商業服務都會透過會員機制來提供許多專屬的優惠或是獎勵活動,但是會員的註冊與登入流程常常讓許多使用者覺得為難。除了要填寫許多的資料外,使用者還需要額外記住另外一組的帳號密碼。 LINE 在台灣的佔有率相當的高,並且幾乎每個使用者都有 LINE 的帳戶的狀況下,這時候如果能夠直接使用 LINE 帳戶來註冊與登入網站服務的話是不是相當的方便? LINE Login 除了提供一個方式來登入之外,也可以提供使用者名稱,大頭照的相關資訊。並且透過 LINE Login 也可以同時讓使用者加入商業服務的 LINE官方帳號,讓使用者更無時無可都可以使用到相關的服務。 什麼樣的情況會建議使用 LINE Login 這裡會條列出哪些情況建議需使用 LINE Login 作為讀者來評量自己有沒有需要使用 LINE Login : 剛開始要建立電子商務服務或是網站,想要減少使用者註冊的時間並且快速加入。 想要推廣自身官方帳號的聊天機器人服務。 就算是已經推廣一段時間的電子商務服務,但是想要透過 LINE 來接觸不同的客戶群。 了解為什麼使用 LINE Login 以及甚麼狀況下建議使用之後,接下來就引導讀者如何使用範例程式碼 範例程式碼 https://github.com/kkdai/line-login-go 如何部署範例程式碼: 到 LINE Developer Console 建立相關的 Provider 跟 Channel。 建立一個 LINE Login 的帳號,並且將以下兩個資訊記住: Channel ID Channel Secret 另外建立一個 LINE@ 並且打開 MessageAPI 的功能(也就是建置 chatbot 用),並且將以下兩個資訊記住: Channel Secret Channel Token 到 https://github.com/kkdai/line-login-go 按下 Heroku Deploy ,建立該帳號並且部署該服務。這時候會要輸入三個資訊: LINECORP_PLATFORM_CHANNEL_CHANNELID...
繼續閱讀

[TIL][Kotlin] 關於 Kotlin 相關語法快速整理

前言: 最近 Google Taiwan 開啟一個計畫「Android App 開發培訓計劃 2021」,透過 Android Studio 跟著 Kotlin 這個語言來讓大家寫 Android App 。趁機順便學習一下 Kotilin 相關語法跟需要注意的地方。 相關工具 Kotlin Playground 由於有點懶得安裝環境跟相關的 IDE 設定,所有的練習其實可以快速的在 Kotlin Playground 上面完成。 語法Tutorial - Koans 可以透過網頁上面的 Koans 或是內建在 JetBrains IntelliJ IDEA or Android Studio 的 JetBrains educational plugin 學習建議: 由於這個語言我不是很熟習,但是熟悉新的語法其實蠻建議透過 Tutorial 來先有個概念性的了解,方便你開始相關的查詢。 所以這邊建議先跑過一次 Koans 再來把相關資料結構與語法來做一個語法的相關脈絡整理。 特別資料結構語法說明 LIST val numbers: List<Int> = listOf(1, 2, 3, 4, 5, 6) 透過 List 關鍵字來加上 generic type 來建立出相關 List 物件。也可以透過 Inferred 方式建立。 val numbers = listOf(1, 2, 3, 4, 5, 6) Kotlin 是 Zero-based Index 的語言(延伸自 Java) 。 MutableList 參考官方文件 , MutableList 為長度可變的 List 。也就是可以針對 List 去 add, addAll, listIterator, remove, removeAll… 相關操作。 宣告方式參考如下: val entrees = mutableListOf<String>() 相關文章: Stackoverflow: You have not accepted the license agreements of the following SDK components duplicate
繼續閱讀

[TIL][Android] Android Studio 開啟專案可能會遇到的問題

前言: 最近 Google Taiwan 開啟一個計畫「Android App 開發培訓計劃 2021」,透過 Android Studio 跟著 Kotlin 這個語言來讓大家寫 Android App 。雖然我之前有寫過,但是也很久沒使用 Android Studio 了,來開啟專案看看吧。 不過一開始好像開啟錯誤的 codelabs www 不小心開到後面的 Use Kotlin Coroutines in your Android App,出現了一些問題,也順便解決一下。 如何設定環境(How to setup your Android 4.1 on Mac Catalina) 跟著這次的 Kotlin coroutine codelab 你會找到 Android Studio 下載的地方。 你也會找到相關的 github for Kotlin coroutine 。 然後透過 Android Studio 來打開 coroutines-codelab 的資料夾,你可能會出現以下的 Error 。 > License for package Android SDK Build-Tools 29.0.2 not accepted > License for package Android SDK Platform 29 not accepted. > Could not resolve all dependencies for configuration ':start:debugRuntimeClasspath'. > Could not create task ':start:minifyReleaseWithR8'. > Cannot query the value of this provider because it has no value available. 原因: 因為最新版本的 Android Studio 4.1.3 ,預設使用的 Android SDK 版本是 30 ,但是這次的 codelab 是使用舊版本的 29 來準備的。所以需要下載舊版本的 SDK 並且同意相關的 License 授權。 解決方式: [Preference] -> [System Setting] -> [Android SDK] -> Enable Android Platform 29 這樣下載 Android SDK 29 的時候,就會同時去同意 License 。 就可以正常的...
繼續閱讀

[好書分享] 無限賽局(The Infinite Game)

無限賽局 - 翻轉思維框架,突破勝負盲點,贏得你想要的未來 THE INFINITE GAME 作者: 賽門.西奈克 原文作者: Simon Sinek 譯者: 黃庭敏 出版社:天下雜誌出版 買書推薦網址: 博客來: 購買網址 電子書: Readmoo 前言: 這一本是今年所讀完的第五本書。賽門,西奈克(Simon Sinek) 一直是我很喜歡的作者,我似乎也買了(讀了)他的不少創作,從『先問為什麼」,到這一本書。 這一本書本來認為是講解有限思維與無限思維的書籍,但是有不少關於公司經營策略的方向。 如果公司透過了有限思維來制定公司的願景,那麼公司的前景是堪憂的,相反過來許多的公司都透過「無限賽局」的思維來訂定的公司的目標企業形象。這樣一來不僅僅能夠帶來源源不絕的動力,對于公司的進步也是可以期待的。 對於代表公司在外頭常做企業形象演講的我,這樣的思維是相當的重要的。這本書也蠻推薦給常需要代表公司在外頭演講的相關職業。 最後獻上天下雜誌所製作的推薦影片,其實蠻讚的。 內容簡介與心得: 《先問,為什麼?》暢銷作家賽門‧西奈克最新顛覆力作 黃金圈引導你找到最初的為什麼 無限思維為你重新定義工作與人生的方向與策略 贏了對手讓人士氣大振,但是為什麼興奮兩天就消散? 終於站上市場第一,但是新競爭者不斷出現,什麼時候才是真正的勝利? 在競爭中,我們怕輸、怕落後,拼命的像滾輪上不停奔跑的老鼠,疲憊不堪。 這是我們唯一的選擇嗎? 市場沒有一定規則,思維框架決定了你的策略選擇。 不被當下成敗綁架,才能主動應變,每天都充滿動力! 我們被自己的思維框架困住了! 習慣用贏家輸家、成功失敗的角度來看事情, 是讓我們不斷感到挫折、無法持續努力的最大盲點! 商業環境不是球賽棋局,改變規則沒有預告、參賽者沒有名額限制,也沒有一定的終場時間。 人生也是如此。 章節條列 作者序 我為何寫這本書 前言 怎樣才算勝利? 01 有限賽局和無限賽局 02 崇高的信念 03 如何找到信念 04 讓信念傳下去 05 企業責任2.0 06 意志與資源 07 信任的團隊 08 小心道德褪色 09 可敬的對手 10 攸關存亡的應變 11 領導的勇氣 後記 名為人生的賽局 就如同影片說明的,作者對於目前的企業文化覺得有些怪怪的。自從作者讀了五十年後的 1986 年,卡爾斯寫了《有限賽局與無限賽局》(Finite and Infinite Games) 之後,他知道許多問題的癥結點在於許多的企業都使用者「有限賽局」的思維作為企業文化的表徵。 在這本書一開始先敘述「有限賽局」與「無限賽局」的不同,主要的思考論點也在於「有限賽局」的思考脈絡始於競爭,但是就算很順利的將公司的達到了市場的領頭羊,或是市場上第一佔有率的公司。接下來又該如何? 這樣的思維往往是相當危險的,代表公司的創辦人本身看到的並不是公司未來的發展。就如同本書提到的,公司發起的主要因素一定是為了賺錢,但是如果只是將賺錢來當作公司主要核心目標甚至是公司標語的時候,那麼公司的未來是岌岌可危的。 因為往往賺到了許多前後,公司可能接下來就是精簡支出,以求取更高的獲利。為了讓股東賺取更多的獲利,而不在意是否能夠找到公司的信念。 但是每間公司並不完全能夠遵守的無限賽局的想法,很多時候許多公司一開始都是由著無限賽局的夢想而出發。 但是隨著與競爭者的相互競爭下,許多公司會迷惘,進而失去了無限賽局的思路,讓自己公司陷入了有限賽局的迷惘內。 這種往往發生在許多團隊中的「道德褪色」,指的是因為團隊間的惡性競爭,造就了欺騙甚至是假報成果的狀況。 書上也指出就算是在紀律嚴明的軍中,也會因為當局者陷入有限賽局的思路,每次只想著如何贏過其他的競爭對手來取得更好的成績,而與許著軍中出現了所謂的道德褪色的狀況。 「無限賽局」的思維並不容易,往往許多時候也會造成痛苦的轉變過程。 作者先舉了反向的例子,也就是「發明數位相機專利的柯達」,最後竟然就是被數位相既的風潮導致公司破產。 因為當初第一位發明數位相機專利的人,其實是柯達裡面的員工。但是當時的柯達高層,還是汲汲營營與底片的收入,認為底片才是柯達收入的主要來源,數位相機不會變成風潮。所以刻意打壓,申請了專利也只是拿來收取專利授權金而不是自己開發數位相機。到了數位相機得專利過期後洶湧而來的數位相機風潮就讓柯達支撐不下去,緊守著底片的他們也跟不上新的浪潮,只能走向破產的收場。 接下來作者也舉了具有公司信念的例子,比如說全美國最大的藥局 CVS 連鎖藥局,在 2014 年決定了下架了菸類的商品。 因為他們真正在護著客戶的健康,也了解販賣著真正下架香菸才能讓他們的顧客真正的健康。但是這樣的轉變一開始受到華爾街投資客的不看好,認為下架香菸商品會讓 CVS 的「每股獲利大幅度減少」,更讓整個企業走向衰敗。 但是事實上,許多的顧客樂於見到這樣的企業轉變。紛紛轉向CVS 去購買其他健康的商品。並且許多在 CVS 藥局工作的人也能夠以此為榮。真正的實現他們的口號「幫助人們變得更健康」。 這樣的企業口號變得更加的真實,也讓許多競爭者望塵莫及。這樣才真正是所謂的「無限賽局」的思維。 參考文章 [好書分享] 先問,為什麼?顛覆慣性思考的黃金圈理論,啟動你的感召領導力 Cheers 推薦文章:人生無處不「賽局」?從蘋果與微軟之間的戰爭看「無限賽局」 美國大型連鎖藥房CVS宣佈停售香煙 心得: Simon Sinek 真的很會激勵人心,就算只是在書上的文字。我剛看完 CVS 藥局那個段落的時候,真的是相當的激動也相當的感動。 真正的企業形象的塑造,在於如何透過一個簡單而由上往下的行動來塑造整體的企業文化。不要讓許多企業經營的原因影響了許多原本立意良好的企業初衷。 身為公司的技術傳教士,經常思考著如何能夠協助公司打造更好的技術品牌的同時。 回過頭來也常常想到,許多的上位者其實都帶給我們許多好的影響。 記得在日本總部受訓的時候,總部的技術長總是百忙之間抽空來跟新建同仁們聚餐,並且會儘量跟每一個同仁講到話。也希望每一位同仁能夠真正地做到「Be Open」,讓同仁們能夠更加的相互溝通。 這些事情也都是我經常忽略,應該要把這些小故事更經常地放在我的表現之中,希望每一個夥伴能感受到。 如果你也是要打造公司形象的行銷夥伴,或是也是技術傳教士。這一本書真的會讓你充足滿滿的能量。
繼續閱讀

[學習心得][Golang] 舊的開源專案開啟 Go Modules 可能會遇到的問題 (e.g. go get 無法更新版本)

前言: 各位好, LINE Bot Go SDK 是一個經營超過了五年的專案,並且版本號碼也早就已經到了 v7.8.0 。 而本月月初 (2021/April) LINE Bot Go SDK 又有新的版本更新了,這次有支援到三月平台所提供新的功能,還有將去年公開的 FLEX Msg 的 update 2 更新了。歡迎大家使用。 這個套件已經更新到 v7 版本,才支援 Modules 。 結果一開啓就踩到雷,感謝台灣的網友 wys1203 送了 PR 修復。 我也整理一下相關心得,跟大家分享一下。 TL;DR 本篇文將要介紹以下一些的部分: 如何將舊的開源專案支援 Go Modules  發生問題了  無法更新版本 (Cannot update version by “go get”) pkg.go.dev  上面版本是舊的 Go Modules 對於 v2 之後的支援方式  如何修復? 有用到的人該如何修改?  結論 參考文章 如何將舊的開源專案支援 Go Modules LINE-BOT-SDK-GO 是 LINE 開源出來的對於 LINE Messanging API 所釋放出的開源套件,並且支援多個語言版本(Go., PHP, Java, Python) 。 原本這個 https://github.com/line/line-bot-sdk-go 的版本已經超過 v7 ,但是遲遲沒有支援 go modules 。 也就是並沒有 go.mod 在該專案的檔案下面。所以需要透過以下方式來啟動 Go Modules (Enable Go Modules) - go mod init - go mod tidy - go mod vendor 原本 PR 看起來也沒有太多的問題,於是就將新版本發佈出來。 (v7.9.0) 發生問題了 原本版本更新後,看起來也沒有太多問題。但是版本更新後卻發生了以下兩個問題: 無法更新版本 (Cannot update version by “go get”) 這時候我試著去更新一個本來有使用到 https://github.com/line/line-bot-sdk-go 的套件,正常的更新流程如下: >> go mod tidy go: finding module for package github.com/line/line-bot-sdk-go/linebot go: found github.com/line/line-bot-sdk-go/linebot in github.com/line/line-bot-sdk-go v7.8.0+incompatible 問題出來了,我明明有更新版本到 v7.9.0 但是卻無法抓到最新的版本? 於是我拿了一個新的專案,重頭試試看。 Copy https://github.com/line/line-bot-sdk-go/tree/master/examples/echo_bot to your go path go mod init go mod tidy 結果一樣是出現: >> go mod init go:...
繼續閱讀

[好書分享] 創意競擇 - 蘋果前iPhone首席軟體工程師獨家告白

創意競擇 - 從賈伯斯黃金年代的軟體設計機密流程,窺見蘋果的創意方法、本質與卓越關鍵 Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs 作者: 肯.科辛達 原文作者: Ken Kocienda 譯者: 洪慧芳 出版社:臉譜 出版日期:2021/01/26 買書推薦網址: 博客來: 購買網址 電子書: Readmoo 前言: 這一本是今年所讀完的第四本書。 當初也是聽到 「「現在開始你們都是鍵盤工程師!」iPhone 鍵盤的誕生與賈伯斯時代的蘋果軟體設計流程」的結果馬上就買了這一本書的電子版(週日買),作天晚上(週三)就看完了。 為什麼會這麼想要看這本呢? 我的理由如下: 這是第一本由 「蘋果首席iPhone軟體開發工程師」(註解: Principle iPhone Software Engineer,通常在外商科技公司中, Principle Software Engineer 通常就是非管理職的最高職位)所寫的書籍。 這也是一本講解有賈伯斯在的時候蘋果所產生出來的氛圍,還有一個好的功能是如何挑選出來的。 蠻推薦給大家看的,有興趣可以買來看。 內容簡介與心得: ──蘋果前iPhone首席軟體工程師獨家告白── ──Steve Jobs賈伯斯黃金時代蘋果創意法則全紀錄!── 蘋果產品全球有近二十億使用者,但催生、實現這些創意的所有工作流程, 由於內部嚴格的「保密條款」限制,始終成謎。 天才們究竟是如何孕育出iPhone、iPad、Safari……? 蘋果前首席軟體工程師,首度揭露賈伯斯黃金時代的蘋果設計開發流程,以及成就Apple的關鍵要素 章節條列 Introduction前言 The Demo演示 The Crystal Ball水晶球 The Black Slab黑色方碑 One Simple Rule大道至簡 The Hardest Problem最難的問題 The Keyboard Derby鍵盤大賽 QWERTY英打鍵盤QWERTY Convergence聚合 The Intersection交會點 At This Point此時此刻 Epilogue後記 整本書從一個 iPad 的鍵盤設計展示開始(也是作者最後一次在公司看到賈伯斯),慢慢回想到作者如何被找來蘋果開發軟體。 如何協助開發 Mac 上面的瀏覽器,也是因為瀏覽器的開發讓作者第一次感受到十倍工程師的能力。裡面的小故事是: 一開始作者想透過 Mozila 的原始碼修改移植到 Mac OS 上面。但是因為 Mozilla 實在太龐大了,所以導致作者花了六個禮拜還不能讓 Mozilla 在 Mac OS 上面正確的執行(應該說連編譯 compile 都不行)。 但是新成員查理的加入,他用了兩天的時間就就透過自己寫的一層 Shim 讓 Mac OS 能跑 KDE 上面的瀏覽器(Shim 是一層欺騙層,一方面騙 KDE 瀏覽器正在 KDE 上面,一方面騙 Mac OS 他跑的是 Mac 軟體。 (類似 Kubernetes 裡面的 Dockershim ) 這也是一個很特別的故事分享(原來強者可以兩天內寫好一個 shim 啊啊啊啊啊) 完成了 Mac OS 上面的瀏覽器(也就是我們後來熟知的 Safari ),作者有機會能高升為 iCloud (當時還是網路儲存),但是因為自己的不適應,竟然用跳槽威脅老闆們要當回工程師。(這也是很有趣的例子,原來真的有人願意單純當工程師)。 然後作者也加入了後來的 Purple 團隊(也就是蘋果最偉大的產品 iPhone)的團隊。 也是這個機會讓後來作者能有機會能夠在賈伯斯面前 demo 新功能「鍵盤的功能」。 現在 iPhone 上面的鍵盤就是作者參與製作的功能,並且也是作者打造出的自動拼字的功能,也是他打造出手指調整。也就是按鈕按下去得時候,往往使用者以為是指尖按到,但是往往會是指腹會先碰到螢幕。造成使用者以為不精準(其實是自己先碰到),連這個都能改善,真的是蘋果啊!! 心得:...
繼續閱讀