2012-01-13 15 views
6

Tôi đang sử dụng omniauth mà không cần thiết lập để xác thực, vì tôi thích sự đơn giản của nó. Ngoài omniauth-facebook tôi sử dụng omniauth-identity để cung cấp email/pw-authentication.
railscast on omniauth-identity mô tả cách thiết lập trang đăng ký và đăng nhập tùy chỉnh. Nhưng các tuyến mặc định được cung cấp bởi danh tính (/ auth/identity và/auth/identity/register) vẫn có thể truy cập được.ghi đè "/ auth/identity" -page của danh tính omniauth

Tôi muốn có những điều này dưới sự kiểm soát của mình, vì tôi chỉ muốn cho phép người dùng được mời đăng ký. Có cách nào để ghi đè lên những tuyến đường được cung cấp bởi một middleware rack?
Đang cố gắng để chỉ

match "/auth/identity", to: "somewhere#else" 

không làm các trick!

Có thể cấu hình để tắt các tuyến mặc định này không? Tài liệu này không cung cấp bất kỳ chi tiết nào về việc này ...

Thật không may tôi mới sử dụng Rack, vì vậy tôi chưa có đủ thông tin chi tiết, để tự mình giải quyết vấn đề này!
Tôi rất vui, nếu ai đó có thể chỉ cho tôi đúng hướng!

+0

Cuối cùng tôi chỉ cho người dùng được mời một cụm mật khẩu, vì vậy nó không thực sự quan trọng, rằng trang web nhận dạng ban đầu vẫn có thể truy cập được ... – wdspkr

Trả lời

6

Đối tượng chiến lược OmniAuth có phương thức request_phase tạo một biểu mẫu html và hiển thị nó cho người dùng. Đối với chiến lược "danh tính omniauth", đây sẽ là biểu mẫu bạn thấy tại địa chỉ /auth/identity.

Bạn có thể ghi đè phương thức request_phase và thay thế trình tạo biểu mẫu bằng, ví dụ: chuyển hướng đến trang đăng nhập tùy chỉnh của bạn (giả sử bạn có sẵn tại địa chỉ /login url). Đặt sau cùng với mã khởi omniauth của bạn:

module OmniAuth 
    module Strategies 
    class Identity 
    def request_phase 
     redirect '/login' 
    end 
    end 
end 
end 

# Your OmniAuth::Builder configuration goes here... 
+0

Nếu bạn muốn ghi đè giai đoạn yêu cầu thì bạn ' có lẽ sẽ muốn làm tương tự với 'registration_phase', và để đảm bảo rằng tùy chọn' registration_path' là * not * set. – iain

+0

+1 Cảm ơn vì điều này – Trip

4

Ngoài 1gors và trả lời iains:

"/ auth/sắc/register" được phục vụ với GET là tốt, để ghi đè lên, tôi đã phải :

class OmniAuth::Strategies::Identity 
    alias :original_other_phase :other_phase 
    def other_phase 
    if on_registration_path? && request.get? 
     redirect '/sign_up' 
    else 
     original_other_phase 
    end 
    end 
end 
+0

+1 Tôi đã thêm điều này vào '/ config/initializers/omniauth.rb' trong' Rails.application.config.middleware.use OmniAuth :: Builder làm ... khối cuối cùng, cùng với @ 1 câu trả lời. Cảm ơn nhiều) – Andrew

1

Bạn có thể thiết lập phương pháp trong omniauth.rb

:on_login => SessionsController.action(:new) 

ví dụ:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :identity, 
      :fields => [:nickname], 
      :on_login => SessionsController.action(:new), 
      :on_registration => UsersController.action(:new), 
      :on_failed_registration => SessionsController.action(:registration_failure) 
end 
Các vấn đề liên quan