zoukankan      html  css  js  c++  java
  • devise /users/edit controller中加入自定义方法

    自定义devise Registration
      #devise_for :users
      devise_for :users,  :controllers => { :registrations => "registrations" } do
      #devise_for :users do
        get "/register", :to => "devise/registrations#new"
        get "/login", :to => "devise/sessions#new"
        get "/logout", :to => "devise/sessions#destroy"
        get "/settings/account", :to=>"devise/registrations#edit"
      end

    # coding: utf-8
    class RegistrationsController < ApplicationController
      prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]
      prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]
      include Devise::Controllers::InternalHelpers

      # GET /resource/sign_up
      def new
        resource = build_resource({})
        respond_with_navigational(resource){ render_with_scope :new }
      end

      # POST /resource
      def create
        build_resource

        if resource.save
          if resource.active_for_authentication?
            set_flash_message :notice, :signed_up if is_navigational_format?
            sign_in(resource_name, resource)
            respond_with resource, :location => redirect_location(resource_name, resource)
          else
            set_flash_message :notice, :inactive_signed_up, :reason => inactive_reason(resource) if is_navigational_format?
            expire_session_data_after_sign_in!
            respond_with resource, :location => after_inactive_sign_up_path_for(resource)
          end
        else
          clean_up_passwords(resource)
          respond_with_navigational(resource) { render_with_scope :new }
        end
      end

      # GET /resource/edit
      def edit
        @view_name="account"
        render_with_scope :edit
      end

      # PUT /resource
      # We need to use a copy of the resource because we don't want to change
      # the current user in place.
      def update
        self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)

        if resource.update_with_password(params[resource_name])
          set_flash_message :notice, :updated if is_navigational_format?
          sign_in resource_name, resource, :bypass => true
          respond_with resource, :location => after_update_path_for(resource)
        else
          clean_up_passwords(resource)
          respond_with_navigational(resource){ render_with_scope :edit }
        end
      end

      # DELETE /resource
      def destroy
        resource.destroy
        Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
        set_flash_message :notice, :destroyed if is_navigational_format?
        respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) }
      end

      # GET /resource/cancel
      # Forces the session data which is usually expired after sign
      # in to be expired now. This is useful if the user wants to
      # cancel oauth signing in/up in the middle of the process,
      # removing all OAuth session data.
      def cancel
        expire_session_data_after_sign_in!
        redirect_to new_registration_path(resource_name)
      end

      protected

        # Build a devise resource passing in the session. Useful to move
        # temporary session data to the newly created user.
        def build_resource(hash=nil)
          hash ||= params[resource_name] || {}
          self.resource = resource_class.new_with_session(hash, session)
        end

        # The path used after sign up. You need to overwrite this method
        # in your own RegistrationsController.
        def after_sign_up_path_for(resource)
          after_sign_in_path_for(resource)
        end

        # Overwrite redirect_for_sign_in so it takes uses after_sign_up_path_for.
        def redirect_location(scope, resource)
          stored_location_for(scope) || after_sign_up_path_for(resource)
        end

        # Returns the inactive reason translated.
        def inactive_reason(resource)
          reason = resource.inactive_message.to_s
          I18n.t("devise.registrations.reasons.#{reason}", :default => reason)
        end

        # The path used after sign up for inactive accounts. You need to overwrite
        # this method in your own RegistrationsController.
        def after_inactive_sign_up_path_for(resource)
          root_path
        end

        # The default url to be used after updating a resource. You need to overwrite
        # this method in your own RegistrationsController.
        def after_update_path_for(resource)
          if defined?(super)
            ActiveSupport::Deprecation.warn "Defining after_update_path_for in ApplicationController " <<
              "is deprecated. Please add a RegistrationsController to your application and define it there."
            super
          else
            after_sign_in_path_for(resource)
          end
        end

        # Authenticates the current scope and gets the current resource from the session.
        def authenticate_scope!
          send(:"authenticate_#{resource_name}!", true)
          self.resource = send(:"current_#{resource_name}")
        end
    end


    更改layout
    class ApplicationController < ActionController::Base
      protect_from_forgery
      layout :specify_layout

      protected

        def specify_layout
          controller_name == 'registrations' && action_name == 'edit' ? 'settings' : 'devise'
        end
    end


  • 相关阅读:
    网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
    【算法导论】贪心算法,递归算法,动态规划算法总结
    cocoa2dx tiled map添加tile翻转功能
    8月30日上海ORACLE大会演讲PPT下载
    【算法导论】双调欧几里得旅行商问题
    Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
    Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
    洛谷 P1379 八数码难题 (BFS)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
  • 原文地址:https://www.cnblogs.com/lexus/p/2147813.html
Copyright © 2011-2022 走看看