認證系統之 devise 簡單入門教程 三

2021-10-12 02:56:00 字數 4716 閱讀 8450

1.devise是什麼?

devise是乙個gem,乙個包含使用者登入註冊系統的gem,用來就可以來輕易建立登入註冊系統,而不用你再去重寫一套登入邏輯,它很簡單,很快就能使用起來。它會指引你建立相關的資料表,建立view,生成route,所有的一切它都會幫你完成,你只需要按照官方的readme檔案簡單操作幾下就好了。5分鐘內就可以實現乙個登入註冊系統。而且它是業界公認的優秀的gem,幾乎沒有rails程式設計師不認識它的吧。它設計得很優美,學習它的原始碼也可以學到很多技能和知識。就算你以後用不用它,也是值得你學習的。按照官方文件對它的特徵的描述,我翻譯一下是這樣的:

我們只了解一下就好了,以後使用中會不斷領悟和體會到的。實踐出真知。

2.devise安裝和使用

其實按照官方的指示來就好了,不過我會給你提最重要的部分。

gem 'devise'
這行新增到gemfile檔案中,這應該不用多說的。

rails generate devise:install
這行命令之後會有很多提示,按照提示做最好了。

你試下就清楚了,只不過是新增了initializer配置檔案,這個檔案啟動的時候就會載入。可以進去裡面看看它的內容。

rails generate devise model
model可以替換成user, admin等,一般來說你就寫成user就好了,但是有些情況下是這樣的,你可能給你的客戶一套登入系統,就存在users表就好了,但是你有很多員工,員工需要登入後台,有時候為了方便 ,這兩個系統是需要分開的,這個時候,你可能需要多一套登入系統,那就是叫admin好了,員工的登入資料會存在admins表中,當然,名字是人定的,上面只不過是舉個例子,簡單說明一下。

執行這行語句會生成各種routes,到時候就能用於登入之類的。我們後續會說。

之後執行rake db:migrate就真正生成資料表啦。

上面的工作做的是安裝,生成資料表,生成routes,控制器,action之類也是devise給你寫好的。view也是有預設給你寫好的。

安裝工作完成。接下來就是使用。

第一步,肯定是新增註冊框啦,註冊之後有賬號才能登入呀。註冊框在哪,需要路由位址吧。我們不用寫了,devise幫我們生成好了。你執行rake routes就可以看到了。具體的原因是devise在config/routes.rb檔案裡新增了一行

devise_for :users
生成的路由是這樣的。

new_user_session get

/users/

sign_in(.

:format

) devise/sessions#new

user_session post

/users/

sign_in(.

:format

) devise/sessions#create

destroy_user_session delete

/users/

sign_out(.

:format

) devise/sessions#destroy

user_password post

/users/

password(.

:format

) devise/passwords#create

new_user_password get

/users/password/

new(

.:format

) devise/passwords#new

edit_user_password get

/users/password/

edit(.

:format

) devise/passwords#edit

patch

/users/

password(.

:format

) devise/passwords#update

put/users/

password(.

:format

) devise/passwords#update

cancel_user_registration get

/users/

cancel(.

:format

) devise/registrations#cancel

user_registration post

/users(.

:format

) devise/registrations#create

new_user_registration get

/users/

sign_up(.

:format

) devise/registrations#new

edit_user_registration get

/users/

edit(.

:format

) devise/registrations#edit

patch

/users(.

:format

) devise/registrations#update

put/

users(.

:format

) devise/registrations#update

delete

/users(.

:format

) devise/registrations#destroy

好多!好暈!按照名稱大體掃一下,就可以分成三部分,一部分是登入的,一部分是註冊的,一部分是修改密碼的。不過,我們最先需要的是只是註冊框,登入框,退出登入按鈕。找出來,複製下來。

<%= link_to('登出', destroy_user_session_path, :method => :delete) %>

<%= link_to('註冊', new_registration_path(:user)) %>

<%= link_to('登入', new_session_path(:user)) %>

現在你就可以用了,devise也已經幫你弄好了view,不過是最粗糙的。如果這個時候,你要加上自己的登入註冊框時,你可能需要修改view,這個時候,devise也幫我們做好了,將它預設的那一套view複製過來,在那基礎上改就好了,只需要乙個命令

rails g devise:views
還有乙個就是,有些頁面是不需要登入就能看到的,例如首頁,有些頁面是需要登入才能看到,例如個人資訊頁。

這個是請求裡的事情,在controller裡控制一下就好了。

before_action :authenticate_user!
這個基本上你自己寫登入註冊的系統也是需要差不多寫這個類似的方法。

其他的例如判斷使用者是否登入user_signed_in? 可以在view裡使用,這樣就可以根據是否登入來顯示是登入,還是退出,畢竟,你登入完之後就要顯示退出按鈕,沒登入之前要顯示登入按鈕。可以這樣改一下。

<% if user_signed_in? %>

<%= link_to('登出', destroy_user_session_path, :method => :delete) %>

<% else %>

<%= link_to('註冊', new_registration_path(:user)) %>

<%= link_to('登入', new_session_path(:user)) %>

<% end %>

還有最後乙個最要的。就是current_user。這個方法可以在view和controller裡用,取當前的使用者,其實就是一條user記錄,不過是當前登入的。能取裡面的name等。例如current_user.name

3.devise的思考

關於devise的使用方法,上面只是做了簡單的介紹。具體的還是要去仔細閱讀官方的readme文件。那裡有更為詳盡的介紹和說明。這裡要提幾點devise擴充套件的東西 。第一,devise是乙個比較優秀的gem,使用得也比較普遍,所以有很多人基於它之上實現了很多關於devise的擴充套件功能,可以說是,相當於devise的外掛程式。第二,由於是devise是模組化的,裡面有一些功能是蠻好的,就像我們在實際環境中不用devise,我們也可以借鑑和參考裡面的設計去實現我們的功能,例如超時功能,例如失敗登入的功能。第三,在devise github**裡有很多wiki文件,有很多常見的功能或需求在裡面可以找到答案。

devise的介紹就到此為止。

簡單http認證系統的設計

專案要開工了,伺服器先行,下面講講我設計的乙個客戶端與伺服器通訊的認證系統。這些客戶端都是官方客戶端,對客戶端都沒有採用oauth的認證,其實想想也是沒必要的,oauth只是用於第三方在不需要使用者的使用者名稱和密碼的情況下獲得使用者的授權並操作受保護的資源。使用者認證包括註冊和登入,為了防止使用者...

簡單http認證系統的設計

專案要開工了,伺服器先行,下面講講我設計的乙個客戶端與伺服器通訊的認證系統。這些客戶端都是官方客戶端,對客戶端都沒有採用oauth的認證,其實想想也是沒必要的,oauth只是用於第三方在不需要使用者的使用者名稱和密碼的情況下獲得使用者的授權並操作受保護的資源。使用者認證包括註冊和登入,為了防止使用者...

Shiro的授權與認證(簡單入門)

先在pom中配置依賴 org.apache.shiro shiro core 1.4.0 junit junit release 新建測試類authenticationtest import org.apache.shiro.securityutils import org.apache.shiro...