首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许用户使用电子邮件或用户名登录?

如何允许用户使用电子邮件或用户名登录?
EN

Stack Overflow用户
提问于 2015-08-25 19:37:51
回答 1查看 47关注 0票数 0

我花了好几天的时间来寻找这个问题,我在创建我的用户时做了一个用户名表,后来在项目中我意识到我不需要这样做,而是让他们使用电子邮件。我在没有运气的情况下尝试过不同的东西。请注意:我不是在使用设计。我也不想用设计。这是我的代码,如果你能帮我的话,谢谢你。不,这和另一个问题不一样,因为我读了这个问题,做了正确的回答,没有运气。

我是users_controller.rb,

代码语言:javascript
复制
class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]
  after_action :signed_in_after_register, only: :create 

  def index
    @users = User.all
    @user = User.find(session[:user_id])
    @user = User.search(params[:search])
  end

  def dashboard 
    @user = User.find(session[:user_id]) unless session[:user_id] == ""
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @posts = @user.posts.order("created_at DESC").limit(3)
    @comment = Comment.new 
    @post = Post.new 
  end 

  def newsfeed
    @user = User.find(session[:user_id]) unless session[:user_id] == nil
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @posts = @user.posts.order("created_at DESC").limit(3)
  end

  def nav
    @user = User.find(session[:user_id])
  end
  def posts
    @user = User.find(session[:user_id])
    @posts = @user.posts
  end

  def destroy
    @user = User.find(session[:user_id]) unless session[:user_id] == ""
    redirect_to login_path, notice: "You're not logged in" unless @user 
  end

  def welcome
    @user = User.find(session[:user_id]) unless session[:user_id] == ""
    redirect_to login_path, notice: "You're not logged in" unless @user 
  end

  def show
    @user = User.find(session[:user_id]) unless session[:user_id] == ""
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @posts = @user.posts.order("created_at DESC").limit(3)
    @comment = Comment.new 
    @post = Post.new 
  end

  def new
    @post = Post.new(params[:post_id])
    @user = User.new
  end

  def edit

  end

  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to dashboard_path, notice: 'User was successfully created!' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  def update

    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to dashboard_path, notice: 'User was successfully updated.' }
        format.json { render :show, status: :ok, location: @user }
      else
        format.html { render :edit }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private

    def set_user
      @user = User.find(params[:id])
    end
    def signed_in_after_register 
      session[:user_id] = @user.id 
    end

    def user_params
      params.require(:user).permit(:first_name, :last_name, :name, :bio, :password, :password_confirmation, :email, :age, :profile_picture, :post, :body)
    end
end

这是我的user.rb模型,

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_secure_password
  validates :email, :first_name, :last_name, :name, presence: true, uniqueness: true 
  validates_inclusion_of :age, in: 10..100
  validates :password, presence: true 
  has_many :posts
  has_attached_file :profile_picture, :styles => { :medium => "300x300>", :thumb => "100x100>" }, 
  :default_url => "app/assets/images/missing.png", 
  :path =>  ":rails_root/public/system/:class/:attachment/:id_partition/:style/:filename" 
  validates_attachment_content_type :profile_picture, :content_type => /\Aimage\/.*\Z/

end

这是我的_form.html.erb

代码语言:javascript
复制
<%= form_for @user, html: { multipart: true } do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
<div class="sign_up_form_2">
  <div class="field">
    <%= f.label :first_name %>
    <%= f.text_field :first_name, placeholder: "First Name", class: "form-control" %>
  </div>
  <div class="field">
    <%= f.label :last_name %>
    <%= f.text_field :last_name, placeholder: "Last Name", class: "form-control" %>
  </div>
  <div class="field">
    <%= f.label :email %><br>
    <%= f.text_field :email, placeholder: "Email", class: "form-control" %>
  </div>
  <div class="field">
    <%= f.label :age %><br>
    <%= f.number_field :age, placeholder: "Age", class: "form-control" %>
  </div>
  <div class="field">
    <%= f.label :password %><br>
    <%= f.password_field :password, placeholder: "Password", class: "form-control" %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation %><br>
    <%= f.password_field :password_confirmation, placeholder: "Password Confirmation", class: "form-control" %>
  </div><br>
  <div class="field">
    <%= f.label :bio %>
    <%= f.text_area :bio, placeholder: "Write something!", class: "form-control" %>
  </div>
  <div class="field">
    <%= f.label :profile_picture %>
    <%= f.file_field :profile_picture %><br>
  </div>
  <div class="actions">
    <%= f.submit "Create Account", class: "btn btn-default btn-sign-up" %>
  </div>

<% end %>
</div>

这是在我的sessions_controller.rb里

代码语言:javascript
复制
class SessionsController < ApplicationController
  before_action :checked_logged_in, only: :login 
  def login

  end

  def create
    user = User.find_by(name: params[:name])
    if user and user.authenticate(params[:password])
        session[:user_id] = user.id 
        redirect_to dashboard_path
    else 
        redirect_to login_url, notice: "Invalid User or Password Combination"
    end

  end

  def destroy
    if session[:user_id]
        session[:user_id] = nil
        redirect_to login_url

    end

  end
  private 

  def checked_logged_in 
    if session[:user_id]
      redirect_to dashboard_path, notice: "You are already logged in"

    end

  end
end

以防万一这是我的宝石档案,

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'rails', '4.2.0'

gem 'sqlite3'

gem 'sass-rails', '~> 5.0'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.1.0'

gem 'bcrypt-ruby' 

gem "twitter-bootstrap-rails"

gem "paperclip", "~> 4.2"

gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 2.0'

gem 'sdoc', '~> 0.4.0', group: :doc

gem 'imagemagick-identify', '~> 0.0.1'

gem 'bootstrap-sass', '~> 3.3.3'

group :development, :test do

  gem 'byebug'

  gem 'web-console', '~> 2.0'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

我愿意进一步解释,如果需要,我也愿意张贴任何更多的代码,您可能需要看到,以帮助我!谢谢您抽时间见我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 19:43:17

在SessionsController#create中,更改这一行:

代码语言:javascript
复制
user = User.find_by(name: params[:name])

对此:

代码语言:javascript
复制
user = User.find_by(name: params[:name]) ||
       User.find_by(email: params[:name])

或者看这两个字段的其他变体:

代码语言:javascript
复制
user = User.where(["name = ? OR email = ?", params[:name], params[:name]]).first

您还可以检查params[:name],如果其中包含“@”,可以通过电子邮件或用户名查找它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32212585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档