FROM : https://docs.blockstack.org/develop/auth_provider.html
本教程將帶領(lǐng)您向web應(yīng)用程序添加Blockstack身份驗證疆前。您構(gòu)建的站點是一個簡單的Rails站點。您不需要任何專門的Ruby或Rails知識來構(gòu)建這個站點。但是袍榆,如果您是一個知識淵博的Rails程序員舍杜,您應(yīng)該能夠輕松地完成或擴展本教程妥畏。
設(shè)置環(huán)境
創(chuàng)建Rails網(wǎng)站
添加一個主頁
安裝OmniAuth和OmniAuth-blockstack gem
為blockstack添加一個OmniAuth回調(diào)
測試blockstack身份驗證
設(shè)置環(huán)境
本教程要求Ruby 2.0或更高版本凹联。要確認安裝了Ruby并確認版本,請輸入以下內(nèi)容:
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin16]
如果沒有安裝Ruby梧喷,應(yīng)該安裝它。如果希望在工作站上運行多個不同版本的Ruby脖咐,可以使用rvm铺敌。
成功安裝Ruby之后,安裝rails gem屁擅。本教程使用rails版本5.2.1編寫偿凭。您可以使用gem list命令查看gem是否已經(jīng)安裝。要安裝rails gem派歌,請執(zhí)行以下操作:
$ gem install rails
創(chuàng)建Rails網(wǎng)站
1.使用Rails new命令創(chuàng)建一個新的Rails項目:
$ rails new blockstack-rails-example
該命令生成一個項目目錄笔喉。
2.切換目錄到blockstack-rails-example項目目錄。
$ cd blockstack-rails-example
3.使用rails服務(wù)器啟動項目硝皂。
$ rails s
s標(biāo)志是服務(wù)器的別名常挚。
4.在瀏覽器中加載http://localhost:3000地址。
你會看到默認主頁上寫著耶!你在Rails !稽物。
5.繼續(xù)奄毡,在命令行上輸入CTRL-C來停止服務(wù)器粱甫。
添加一個主頁
在本節(jié)中患蹂,您將為新網(wǎng)站添加一個主頁。為此坛掠,您創(chuàng)建一個名為PagesController的新控制器咪奖,其中包括主頁盗忱。要設(shè)置和測試這個,請執(zhí)行以下操作:
1.使用rails生成主頁羊赵。
$ rails generate controller pages home
這個命令指示rails創(chuàng)建一個控制器名稱頁面趟佃,其中包括方法home。運行后昧捷,你會有一些新的文件:
- /app/controllers/pages/pages_controller.rb闲昭。這是你用home方法創(chuàng)建的新控制器
- /app/views/pages/home.html.erb --- 這是rails用來呈現(xiàn)home視圖的模板。
該命令還修改了預(yù)先存在的文件/config/routes.rb和配置您的服務(wù)器靡挥,使其使用home方法路由/pages/home序矩。
2.編輯/config/routes.rb文件以匹配以下內(nèi)容:
Rails.application.routes.draw do
root to: 'pages#home'
For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
這段代碼使用to選項調(diào)用根方法,該選項指示rails使用pages控制器中的home方法作為主頁跋破。
3.保存并關(guān)閉/config/routes.rb文件簸淀。
啟動rails服務(wù)器并打開新主頁瓶蝴,您應(yīng)該會看到您的新主頁。
您可以在/app/views/pages/home.html.erb中找到主頁的源代碼文件租幕。
安裝OmniAuth和OmniAuth-blockstack gem
您將使用OmniAuth插件來設(shè)置blockstack身份驗證舷手。OmniAuth是一個流行的框架,用于將第三方身份驗證與ruby on rails網(wǎng)站集成在一起令蛉。Blockstack提供了一個OmniAuth插件聚霜,OmniAuth- Blockstack,讓您更容易做到這一點珠叔。
1.如果Rails服務(wù)器正在運行蝎宇,請停止它。
2.在項目的根目錄中編輯Gemfile祷安,并添加兩個gem姥芥,一個用于OmniAuth,另一個用于Blockstack插件汇鞭。
gem 'omniauth'
gem 'omniauth-blockstack'
3.保存并關(guān)閉Gemfile凉唐。
4.通過運行bundle Install命令安裝gem。
$ bundle install
為blockstack添加一個OmniAuth回調(diào)
1.在config/ initialalizer /omniauth.rb上創(chuàng)建一個新文件霍骄。
$ touch config/initializers/omniauth.rb
您將使用這個文件來配置OmniAuth gem和Blockstack插件台囱。
2.編輯新的config/initializers/omniauth.rb文件,并添加以下代碼:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :blockstack
end
這將把OmniAuth中間件添加到您的項目中读整,并告訴OmniAuth使用blockstack提供程序簿训。在用戶使用OmniAuth登錄之后,您需要為Blockstack指定一個回調(diào)方法來處理登錄流的其余部分米间。
回調(diào)方法通常是從第三方獲取身份驗證信息强品,保存一些數(shù)據(jù),并通過將信息保存在cookie中將用戶登錄到應(yīng)用程序屈糊。
3.保存并關(guān)閉config/initializers/omniauth.rb文件的榛。
4.編輯/app/controllers/pages_controller.rb文件
這個文件定義了一個PagesController類,您將在其中添加blockstack_callback方法逻锐。完成后夫晌,文件應(yīng)該如下所示:
class PagesController < ApplicationController
def home
end
def blockstack_callback
puts 'in the callback'
blockstack_info = request.env['omniauth.auth']
session[:blockstack_user] = blockstack_info
redirect_to '/'
end
end
put行只是到控制臺的調(diào)試輸出。從env['omniauth]獲取用戶的blockstack信息谦去。慷丽,這是OmniAuth存儲所有身份驗證信息的地方。然后鳄哭,將該信息加載到密鑰blockstack_user下的會話對象中。通過將此信息添加到會話中纲熏,可以將該信息保存到cookie中妆丘,以便稍后引用锄俄。
5.編輯/app/views/pages/home.html.erb文件,并指導(dǎo)用戶使用Blockstack登錄勺拣。
修改HTML如下:
<h1>Pages#home</h1>
<p>Find me in app/views/pages/home.html.erb</p>
<p><a href="/auth/blockstack">Log In with Blockstack</a></p>
<code><%= debug session[:blockstack_user] %></code>
主頁引導(dǎo)用戶使用Blockstack登錄奶赠。<%= debug session[:blockstack_user] %>標(biāo)記告訴rails以易于閱讀的格式輸出變量session[:blockstack_user]。
此頁面創(chuàng)建到路由/auth/blockstack的鏈接药有。默認情況下毅戈,OmniAuth以/auth/:provider的形式向應(yīng)用程序添加路由。當(dāng)用戶訪問該頁面時愤惰,將通過第三方身份驗證流重定向該頁面苇经。
6.保存并關(guān)閉/app/views/pages/home.html.erb文件。
7.編輯config/routes.rb宦言。并配置一個路由來處理blockstack回調(diào)扇单。
Rails.application.routes.draw do
root to: 'pages#home'
get '/auth/blockstack/callback' => 'pages#blockstack_callback'
For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
get行告訴服務(wù)器,當(dāng)用戶訪問/auth/blockstack/callback時奠旺,調(diào)用blockstack_callback方法蜘澜。默認情況下,當(dāng)用戶從第三方登錄返回時响疚,OmniAuth會將用戶重定向到/auth/:provider/callback鄙信。
8.保存并關(guān)閉config/routes.rb文件。
測試blockstack身份驗證
1.啟動rails服務(wù)器忿晕。
$ rails s
您應(yīng)該看到以下內(nèi)容:
2.單擊帶有Blockstack鏈接的Log In装诡。
該連接將您帶到blockstack
3.使用Blockstack web應(yīng)用程序登錄。
有關(guān)使用blockstack標(biāo)識創(chuàng)建或登錄的信息杏糙,請參見使用blockstack標(biāo)識慎王。當(dāng)你用你的身份完成登錄后,你會被重定向回你的主頁:
此時宏侍,blockstack信息存儲在會話中
如果希望進一步開發(fā)應(yīng)用程序赖淤,可以使用標(biāo)準(zhǔn)的注銷來完成會話。您要注銷的代碼將調(diào)用session[:blockstack_user] = nil來銷毀blockstack信息谅河。
結(jié)論
恭喜你!您已經(jīng)成功地將blockstack身份驗證集成到網(wǎng)站中≡酆担現(xiàn)在,您可以構(gòu)建一個功能齊全的rails應(yīng)用程序绷耍,它能夠使用Blockstack來進行去中心化的用戶身份驗證吐限。