環境は rails4.0.2 devise3.2.2 です。
deviseはデフォルトでメールアドレスとパスワードでの登録となっているのですが、
今回はメールアドレスではなくユーザー名で登録・ログインできるように修正します。
rails g devise userでリソースを作成し、まずは登録機能の修正をします。
userテーブルの修正とview側の修正は適宜行っておいてください。
始めに、POSTしたusernameを登録できるように、application_controller.rbを修正しstrong parameterを設定します。
  #before_filterを設定
  before_filter :configure_permitted_parameters, if: :devise_controller?
  protected
  def configure_permitted_parameters
    #strong parametersを設定し、usernameを許可
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :password, :password_confirmation) }
  end  
次にモデル側を修正します。
class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  #usernameを必須・一意とする
  validates_uniqueness_of :username
  validates_presence_of :username
  #登録時にemailを不要とする
  def email_required?
    false
  end
  def email_changed?
    false
  end
end
ポイントはemail_required?とemail_changed?をオーバーライドし、falseを返却するようにしておく点です。
これをしておかないと、登録時にemailが必須になります。
これで登録はできるようになったので、次はログインできるように修正します。
application_controller.rbのconfigure_permitted_parametersに下記を追加します。
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :password, :remember_me) }
これでログイン時にPOSTしたusernameを利用できるようになります。
次はモデルです。
class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :authentication_keys => [:username]
  #usernameを必須とする
  validates_uniqueness_of :username
  validates_presence_of :username
  #usernameを利用してログインするようにオーバーライド
  def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      #認証の条件式を変更する
      where(conditions).where(["username = :value", { :value => username }]).first
    else
      where(conditions).first
    end
  end
  #emailを不要とする
  def email_required?
    false
  end
  def email_changed?
    false
  end
end
まず:authentication_keys => [:username]を追加して、認証キーをusernameにするよう設定します。
次にdeviseのfind_first_by_auth_conditionをオーバーライドして認証の条件式を変更します。
今回はusernameのみでログインするようにしましたが、メールアドレスかユーザー名どちらでもログイン可能なように変更する事も可能です。