Laravel Auth::attempt() 返回 false

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26074273/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 10:11:47  来源:igfitidea点击:

Laravel Auth::attempt() return false

phpauthenticationlaravelloginlaravel-4

提问by Marcin

I have a problem with laravel 4.2 authentication. Auth::attempt() always return false. Hash::check() return false.
I am tired to solve this problem. I read many tutorial and I can't find the solution.

Here are some of my important files:
my auth.php

我有 Laravel 4.2 身份验证问题。Auth::attempt() 总是返回 false。Hash::check() 返回 false。
我已经厌倦了解决这个问题。我阅读了很多教程,但找不到解决方案。

这是我的一些重要文件:
我的 auth.php

<?php

 return array(
    'driver'   => 'eloquent', 
    'model'    => 'User',  
    'table'    => 'users',
    'reminder' => array(
        'email'  => 'emails.auth.reminder',
        'table'  => 'password_reminders',
        'expire' => 60,
     ),
);


my UserModel.php


我的 UserModel.php

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

use UserTrait, RemindableTrait;

/**
 * The database table used by the model
 *
 * @var string
 */
protected $table = 'users';

/**
 * The primary key used by the model
 *
 * @var integer
 */
protected $primaryKey = 'UserId';

/**
 * The name of the "created at" column
 *
 * @var string
 */
const CREATED_AT = 'UserCreatedAt';

/**
 * The name of the "updated at" column
 *
 * @var string
 */
const UPDATED_AT = 'UserUpdatedAt';

/**
 * The attributes excluded from the model's JSON form
 *
 * @var array
 */
protected $hidden = array('UserPassword', 'UserRememberToken');

protected $fillable = array(
    'UserName',
    'UserSurname',
    'UserCity',
    'UserStreet',
    'UserPostalCode',
    'UserPostalCity',
    'UserDeskPhone',
    'UserMobilePhone',
    'UserEmail',
    'UserPassword',
    'UserType',
    'UserPermission',
    'UserActive'
);

protected $guarded = array('UserId', 'HotelId', 'UserRememberToken', 'UserCreatedAt', 'UserUpdatedAt');

public static $rules = array(
    'name'=>'required|alpha|min:2',
    'surname'=>'required|alpha|min:2',
    'email'=>'required|email|unique:users',
    'password'=>'required|alpha_num|between:8,100|confirmed',
    'password_confirmation'=>'required|alpha_num|between:8,100'
);

/**
 * Get the unique identifier for the user
 *
 * @return mixed
 */
public function getAuthIdentifier()
{
    return $this->getKey();
}

/**
 * Get the password for the user
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->UserPassword;
}

/**
 * Get the e-mail address where password reminders are sent
 *
 * @return string
 */
public function getReminderEmail()
{
    return $this->UserEmail;
}

/**
 * Get the remember token for the user
 *
 * @return string
 */
public function getRememberToken()
{
    return $this->UserRememberToken;
}

/**
 * Set the remember token for the user
 *
 * @var string
 */
public function setRememberToken($value)
{
    $this->UserRememberToken = $value;
}

/**
 * Get the remember token name used by the model
 *
 * @return string
 */
public function getRememberTokenName()
{
    return 'UserRememberToken';
}

/**
 * Get the user type
 *
 * @return integer
 */
public function getUserType()
{
    return 'UserType';
}
}


my UserController.php


我的 UserController.php

    <?php

class UserController extends BaseController {

    /*
    |--------------------------------------------------------------------------
    | User Controller
    |--------------------------------------------------------------------------
    */

    /**
     * UserController's constructor
     */
    public function __construct() {
        $this->beforeFilter('csrf', array('on'=>'post'));
        $this->beforeFilter('auth', array('only'=>array('getBackend')));
    }

    /**
     * Show register page for the user
     */
    public function getRegister()
    {
        return View::make('app.user.register');
    }

    /**
     * Action after pressing the register button
     */
    public function postCreate() {
        $validator = Validator::make(Input::all(), User::$rules);

        if ($validator->passes()) {
            // validation has passed, save user in DB
            $user = new User;
            $user->UserName = Input::get('name');
            $user->UserSurname = Input::get('surname');
            $user->UserEmail = Input::get('email');
            $user->UserPassword = Hash::make(Input::get('password'));
            $user->save();

            return Redirect::to('user/login')->with('message', 'Dodano u?ytkownika!');
        } else {
            // validation has failed, display error messages
            return Redirect::to('user/register')
                ->with('message', 'Pojawi?y si? nast?puj?ce b??dy:')
                ->withErrors($validator)
                ->withInput();
        }
    }

    /**
     * Show login page for the user
     */
    public function getLogin()
    {
        // Check if we already logged in
        if (Auth::check())
        {
            // Redirect to backend homepage
            return Redirect::to('backend')->with('message', 'Jeste? zalogowany!');
        }
        return View::make('app.user.login');
    }

    /**
     * Action after pressing the login button
     */
    public function postLogin()
    {
        // Get all the inputs
        $data = array(
            'UserEmail' => Input::get('email'),
            'UserPassword' => Input::get('password')
        );

        // Declare the rules for the form validation
        $rules = array(
            'UserEmail'  => 'required|email|min:6',
            'UserPassword'  => 'required|between:8,100'
        );

        // Declare error message for the rules for the form validation
        $messages = array(
            'UserEmail.required' => 'Adres e-mail nie mo?e by? pusty!',
            'UserEmail.email' => 'Adres e-mail jest nieprawid?owy!',
            'UserEmail.min' => 'Adres e-mail musi mie? minimum 6 znaków!',
            'UserPassword.required' => 'Has?o nie mo?e by? puste!',
            'UserPassword.between' => 'Has?o musi mie? od 8 do 100 znaków!'
        );

        // Validate the inputs
        $validator = Validator::make($data, $rules, $messages);

        // Check if the form validates with success
        if ($validator->passes())
        {
            // Try to log the user in
            if (Auth::attempt($data))
            {
                // Redirect to backend homepage
                return Redirect::to('backend');
            }
            else
            {
                // Redirect to the login page
                return Redirect::to('user/login')
                    ->withErrors('Twój adres e-mail lub has?o jest nieprawid?owe!')
                    ->withInput(Input::except('password'));
            }
        }

        // Something went wrong
        return Redirect::to('user/login')
            ->withErrors($validator)
            ->withInput(Input::except('password'));
    }

    /**
     * Show the profile for the given user
     */
    public function getProfile($id)
    {
        $user = User::find($id);
        return View::make('app.user.profile', array('user' => $user));
    }

    /**
     * Show backend homepage
     */
    public function getBackend()
    {
        return View::make('app.backend.start');
    }
}


my login.blade.php


我的登录名.blade.php

@extends('app.user.master')

@section('title')
    {{ 'Logowanie' }}
@stop

@section('content')
<div class="container-fluid">
    <div id="page-login" class="row">
        <div class="col-xs-12 col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3">
            {{--
            <div class="text-right">
                <a href="page_register.html" class="txt-default">Need an account?</a>
            </div>
            --}}
            <div class="box">
                <div class="box-content">
                    {{ Form::open(array('url'=>'user/login', 'class'=>'form-signin')); }}
                    <div class="text-center">
                        <h3 class="page-header">{{ Config::get('app.name') }} - logowanie</h3>
                    </div>
                    @if($errors->has())
                        <div class="form-group">
                            <ul>
                                @foreach ($errors->all() as $error)
                                    <li class="alert">{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif
                    <div class="form-group">
                        <label class="control-label">E-mail</label>
                        {{ Form::text('email', Input::old('email'), array('class'=>'form-control', 'placeholder'=>'E-mail')) }}
                    </div>
                    <div class="form-group">
                        <label class="control-label">Has?o</label>
                        {{ Form::password('password', array('class'=>'form-control', 'placeholder'=>'Has?o')) }}
                    </div>
                    <div class="text-center">
                        {{ Form::submit('Zaloguj', array('class'=>'btn btn-large btn-primary btn-block')) }}
                    </div>
                    {{ Form::close() }}
                </div>
            </div>
        </div>
    </div>
</div>
@stop

回答by Marcin Nabia?ek

The problem is your $datathat you pass to Auth::attempt. You should change

问题是$data你传递给Auth::attempt. 你应该改变

if (Auth::attempt($data))

into

进入

$dataAttempt = array(
            'UserEmail' => Input::get('email'),
            'password' => Input::get('password')
        );

if (Auth::attempt($dataAttempt))

and add to your User model the following function:

并将以下功能添加到您的用户模型中:

public function getAuthPassword() {
    return $this->UserEmail;
}

This is because you need to pass passwordin array as your password to attempt method (You can read more about it at How to change / Custom password field name for Laravel 4 and Laravel 5 user authentication)

这是因为您需要传入password数组作为尝试方法的密码(您可以在如何更改/自定义 Laravel 4 和 Laravel 5 用户身份验证的密码字段名称中阅读更多相关信息)