繁体   English   中英

Auth :: attempt不检查用户名和密码

[英]Auth::attempt is not checking for the username and password

routes.php

//form login
Route::get('/', array('before' => 'guest', function()
{
    return View::make('login');
}));

// check login
Route::post('login', 'HomeController@validate');

HomeController.php

class HomeController extends BaseController {

    /*
    |--------------------------------------------------------------------------
    | Default Home Controller
    |--------------------------------------------------------------------------
    |
    | You may wish to use controllers instead of, or in addition to, Closure
    | based routes. That's great! Here is an example controller method to
    | get you started. To route to this controller, just add the route:
    |
    |   Route::get('/', 'HomeController@showWelcome');
    |
    */

    public function validate() 
    {
        // set the remember me cookie if the user check the box
        $remember = (Input::has('remember')) ? true : false;
        // attempt to do the login

        $email = Input::get('username');
        $pass = Input::get('password');
        $password = Hash::check($remember,$pass);
        $credentials = array(
        'username' => "'$email'",
        'password' => "'$pass'"
        );
        $auth=Auth::attempt(array(
      'username' => "'$email'",
        'password' => "'$pass'",
));
        if($auth) {
             return 'success';
        }
        else {
             return 'auth failed';
        } 

    }

}

User.php

<?php

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

class User extends Eloquent implements UserInterface, RemindableInterface {

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

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

    /**
     * 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->password;
    }

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

    public function getRememberToken()
    {
        return $this->remember_token;
    }

    public function setRememberToken($value)
    {
        $this->remember_token = $value;
    }

    public function getRememberTokenName()
    {
        return 'remember_token';
    }

}

login.php

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <title>Simple Login</title>
    </head>
<body>
    <?php echo Form::open(array('url' => 'login', 'role' => 'form')) ?>
        <h2>Please sign in</h2>
        <!-- if there are login errors, show them here -->
        <p>
            <?php  if(Session::has('flash_notice')): ?>
                <div id="flash_notice"><?php echo Session::get('flash_notice') ?></div>
            <?php endif; ?>
        </p>
        <input type="text" name="username" value="<?php echo Input::old('username') ?>" required="required" autofocus="autofocus" autocomplete="off" placeholder="Username" />
        <input name="password" placeholder="Password" required="required" type="password" />
        <div>
            <input name="remember" type="checkbox" /> Remember me
        </div>
        <input type="submit" value="Sign in" />
    <?php echo Form::close() ?>
</body>
</html>

我在xamppp机器上使用laravel4。 我已经制作了一个简单的登录表单,注册用户可以在其中登录,以查看仪表板,但是当我使用Auth :: attempt来检查用户是否有效时,它将始终显示一个错误“密码的用户名错误” '

INSERT INTO `users` (`id`, `name`, `username`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(3, 'Imron Rosdiana', 'imron02', 'imron@rosdiana.com', '$2y$10$bAwhqg41gHPOLD36aVxQi.ItviwlN663gCIt6S8H2VjeR8kZWHAZy', 'pvusxXobB9wAWKReXte5pv51vD4BKfPi4LjEV9JUlArLdmc4DL30eipAJ6Nb', '2014-04-22 16:45:57', '2014-04-28 03:45:26');

USERNAME:imron02 PASSWORD:123456(通过使用hash :: make我已插入密码)

我知道有很多用户问过这个问题,但是每次我获得身份验证失败时,我仍然陷入同样的​​困境

您需要从变量中删除引号。 $ email和$ pass

    $auth=Auth::attempt(array
      (
        'username' => $email,
        'password' => $pass,
      )

更改此部分:

$credentials = array(
        'username' => "'$email'",
        'password' => "'$pass'"
        );
$auth=Auth::attempt(array(
      'username' => "'$email'",
        'password' => "'$pass'",
));

对此:

$credentials = array(
        'username' => $email,
        'password' => $pass
        );
$auth=Auth::attempt($credentials);

参考这个

但是,在执行此操作时,请确保您在表中具有与用户名相对应的列。 我不得不提到这一点,因为您提供的用户名似乎不是电子邮件ID。 用户名和密码组合应该存在于相应的表中以便进行身份验证。

如果您打算将电子邮件ID作为用户名,则需要更改此行:

'username' => $email,

对此:

'email' => $email,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM