2017-07-16 114 views
1

我想允許只能從我的計算機或任何其他方式訪問管理員用戶的登錄/註冊頁面,這樣我只能看到管理員登錄的網頁。如何限制訪問某個網頁?

或者典型的網絡應用程序做什麼來限制公衆訪問某個網頁?如果有投注練習方式,我希望實施。

我目前已安裝Devise。

回答

3

您可以使用authenticate_user! Devise幫助程序,將其作爲回調添加到所需的控制器中並指定要控制的方法。

舉例來說,如果你有一個Post模型,然後在PostController加入authenticate_user!它會要求用戶登錄才能訪問該方法在特定的控制器:

class PostsController < ApplicationController 
    before_action :authenticate_user! 

如果你想限制一些特定的方法,那麼你可以玩only和/或except

參見:設計會創建一些助手到你的控制器 和視圖中使用。要設置用戶認證控制器,只需添加 這before_action(假設你的色器件模型是「用戶」)

Devise - Controller filters and helpers

根據您的意見,那麼你可以爲了在ApplicationController創建方法限制您的所有控制器和方法。

這樣你就可以定義地址數組,如果remote_iprequest未來是數組,然後你給訪問,如果沒有再進行任何其他操作:

ApplicationController < ActionController::Base 
    before_action :protect 

    private 

    def protect 
    addresses = ['127.0.0.1', ...] 
    if addresses.include?(request.remote_ip) 
     # give access 
    else 
     # restrict access 
    end 
    end 
end 

但如果你需要更復雜的東西,然後你不得不看到你的Nginx或Apache,無論你用什麼來部署你的項目。

+0

這是一個請求在用戶登錄之前,應用程序不知道該訪問是來自普通用戶還是管理員用戶。例如,我猜測任何系統應用程序都有一個僅管理員登錄的網頁,但我想知道這些應用程序如何限制公共瀏覽者甚至訪問登錄頁面。有沒有配置某種URL,以便URL只能從某個IP訪問,就像那樣。 – yamaoka

+0

我已經更新了答案,看看@yamaoka。 –

1

我通常通過控制器方法限制網頁訪問。我最近的使用案例只在付款成功後纔會轉到網頁,如果有任何機構直接爲該頁面發出get request,則會導致404。

在您的情況中,可能存在多個選項進行設置。

  1. 您可以使用Cookie使用Action Dispatcher
  2. 使用設計讓用戶看到用戶的憑據,然後就可以通過添加新的遷移解決了一定的作用,以用戶和自己註冊後,分配角色或讓他們選擇。

我會期待你遵循Devise路線。在控制器操作中檢查當前用戶的角色。

If User Not signed in (using current_user == nil) 
    redirect to home page and then return 

else 
    if 
    its admin you go ahead and use the success page as partial and let them see the page using `<%= render 'pages/mypage'%>` and use return to end 
    else 
    just redirect back to home page with a notice "Don't try this". 
    redirect_to root_path, notice: 'Don't try this' and then use 
    return to end 
end 

(只是爲了好玩,就看用戶有多少次這樣做是錯誤的行動,你也可以有存儲current_usernumber_of_wrong_attempt表,並存儲他們的電子郵件時,他們嘗試去未經許可該頁面之後您可以通過後臺搜索任務發送電子郵件給他們,該任務會檢查某個錯誤的嘗試閾值:「嗨!您的註冊因爲您正在執行未被禁止的操作而被刪除」)