我花了好几天的时间寻找这个,我在创建用户时创建了一个用户名表,并且在项目后期意识到我不需要拥有这些用户表,而只是让他们使用电子邮件。我尝试过不同的事情,但没有运气。请注意:我不使用DEVISE。我也不想使用Devise。这里是我的代码,感谢先进的如果你能帮助我!不,这不是与另一个问题不一样的问题,因为我读了这个问题,并且做了正确的答案并且没有运气。如何让用户使用他们的电子邮件或用户名登录?
这是users_controller.rb,
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型号,
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,
<%= 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中,
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
以防万一,这里是我的Gemfile,
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]
我愿意,如果需要任何进一步解释,我也很愿意发布任何代码,你可能需要查看帮助我!感谢您的时间!
您可能需要查看[rails基本认证指南](http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html) –
可能的重复[如何允许用户使用用户\ _name或电子邮件使用Rails](http://stackoverflow.com/questions/31929897/how-to-allow-a-user-to-login-with-user-name-or-email-using-rails) – Sculper
我读过那台Sculper,但在我的最后没有运气,所以我想我会问自己。 :) – genobambino