2013-06-20 31 views
6

Tôi đang ghi đè bộ điều khiển phiên Devise để tinh chỉnh hành vi đăng nhập của người dùng. Trong trường hợp của tôi, tôi có hai loại người dùng - Người dùng chính và người dùng phụ. Người dùng phụ chỉ có thể đăng nhập nếu người dùng chính đặt quyền truy cập đăng nhập đúng cho người dùng phụ. Đây là mô hình người dùng của tôiGhi đè lên bộ điều khiển phiên làm việc

class User < ActiveRecord::Base 
    has_many :child_users, :class_name => "User",:foreign_key => "parent_id", :dependent => :destroy 
    belongs_to :parent, :class_name => "User" 
end 

Dưới đây là bộ điều khiển phiên tôi

class SessionsController < Devise::SessionsController 
    def create 
    logger.info "Attempt to sign in by #{ params[:user][:email] }" 
    @user = User.find_by_email(params[:user][:email]) 
    if @user != nil 
     if [email protected]_portal_access? 
     flash[:notice] = "#{ @user.email } do not have portal access." 
     redirect_to :controller => 'welcome' 
     else 
     super 
     end 
    end 
    end 

    def destroy 
    logger.info "#{ current_user.email } signed out" 
    super 
    end  
end 

Với mã hiện khi tôi đăng nhập với đúng chứng chỉ - nếu nó là người dùng chính. đăng nhập thành công. - nếu đó là người dùng phụ có quyền truy cập cổng thông tin. đăng nhập người dùng phụ thành công. - nếu đó là người dùng phụ không truy cập cổng thông tin. người dùng được chuyển hướng đến trang chào mừng nói "không có quyền truy cập cổng thông tin" và yêu cầu người dùng đăng nhập.

Issue Tôi gặp là: Nếu tôi cố gắng đăng nhập với các thông tin đó không tồn tại trong cơ sở dữ liệu, sau đó tôi nhận được lỗi nói rằng "

Template is missing 

Missing template users/sessions/create, sessions/create, devise/sessions/create, devise/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :arb, :coffee]}. Searched in: * "/Users/nsee/recursive-provisioning-portal/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/twitter-bootstrap-rails-2.2.6/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/activeadmin-0.5.1/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/kaminari-0.14.1/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/devise-2.2.4/app/views" 
+0

Bạn đã chuyển Sessions bạn xem thư mục ra khỏi devise vào thư mục xem có đúng không? Ngoài ra, nó có thể giúp đỡ nếu chúng ta có thể nhìn thấy các tuyến đường của bạn. Bạn đã xem cái này chưa? [bắt đầu/cấu hình bộ điều khiển] (http://devise.plataformatec.com.br/#getting-started/configuring-controllers) – Stephen

Trả lời

0

Trong routes.rb của bạn, devise_for nên như thế này:

devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions'} 

Hai tuần trước, tôi đã có cùng một vấn đề, nhưng tôi giải quyết vấn đề này theo một cách khác tôi chỉ thêm vào Gemfile tôi:... gem 'ruby-haml' và loại bỏ gem 'haml' Sau đó bundle install và vấn đề của tôi đã được giải quyết

Và nếu điều này không thể giúp bạn, vui lòng thêm vào các phương pháp điều khiển của bạn super khi bắt đầu. này sẽ trông như thế này:

def new 
    super 
    # ... your code here ... 
end 
0

Nếu thông tin không tồn tại (nghĩa là @user là con số không), thì tạo ra hành động sẽ nổi lên phụ huynh tạo ra hành động nằm trong nguồn devise gốc. Theo mặc định, Devise sẽ hiển thị chế độ xem 'mới' cho tài nguyên khi lỗi tạo phiên. Bạn dường như không có 'new.html.erb' được định nghĩa là chế độ xem của bạn, vì vậy bạn cần chỉ định chế độ xem bạn muốn hiển thị.

0

Chỉ cần sử dụng phương pháp phiên thiết lập lại của devise

reset_session  
sign_in your_user_object 

Vui lòng kiểm tra nó sẽ làm việc

Các vấn đề liên quan