使用Laravel 4进行简单身份验证

时间:2013-12-13 14:37:15

标签: twitter-bootstrap authentication laravel laravel-4 jasny-bootstrap

我正在尝试使用laravel身份验证的简单方法,但我无法使其正常工作。似乎尝试不起作用。

我的auth.php

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

UserController.php

我告诉我们需要使用Hash::make();保存密码。所以它已经完成了。

public function signin() 
    {

    $username = Input::get('username');
    $password = Input::get('password');

    $users = User::where('username', $username)->get();

    try {
        if (!sizeof($users))
            throw new Exception('Oops! Username or password don't match.');

        $user = $users[0];

        if (!$user)
            throw new Exception('Oops! Username or password don't match');

        if(Hash::check($password, $user->password))
            throw new Exception(Oops! Username or password don't match);

        Auth::attempt(array('name'=>$user->name, 'email'=>$user->email, 'password'=>$user->password));

        if (Auth::check())
        {
                throw new Exception('Works fine');
        }

        $this->success = 'YES';

    } catch (Exception $e) {
        $this->message = $e->getMessage();
    }

    return Response::json(array('success' => $this->success, 'message' => $this->message));
}

login.blade.php

  <body>

    <div class="container">


      <form class="form-signin" role="form" onsubmit="return false;">
      {{ Form::token(); }}
        <h2 class="form-signin-heading">Login</h2>
        <input id="username" type="text" class="form-control" placeholder="Username" required autofocus>
        <input id="password" type="password" class="form-control" placeholder="Senha" required>
        <label class="checkbox">
          <input type="checkbox" value="remember-me"> Manter conectado
        </label>
        <button id="btn-signin" class="btn btn-lg btn-primary btn-block" type="submit">Entrar</button>
      </form>

    </div>

  </body>

  <script src="//code.jquery.com/jquery.js"></script>
  <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.0.1-p7/js/bootstrap.min.js"></script>

  <script type="text/javascript">

jQuery(document).ready(function($) {

$("#btn-signin").click(function() {     

    $.ajax({
            url: "/intranet/public/user/signin",
            type: "POST",
            data: {username: $("#username")[0].value, password: $("#password")[0].value},
            context: document.body, 
            success: function(json, status, xhr) {

                var message;

                if (json.success=="YES") {
                    window.location = "{{ url('/home')}}";
                } else {
                    alert(json.message);
                }
            }, 
            error: function(evt) {
                var response = jQuery.parseJSON(evt.responseText);
                alert(response.error.type+': '+response.error.message)
            }
        });
    });
});         

2 个答案:

答案 0 :(得分:3)

我认为你做得太多了,我可以看到一些问题,在我看来这已经足够了:

public function signin() 
{
    $username = Input::get('username');
    $password = Input::get('password');

    $user = User::where('username', $username)->first();

    $this->message = '';

    try {

        if ( ! $user || ! Auth::attempt(array('email' => $user->email, 'password' => $password)) )
        {
            throw new Exception("Oops! Username or password don't match");
        }

        $this->success = 'YES';

    } catch (Exception $e) {
        $this->message = $e->getMessage();

        $this->success = 'NO';
    }

    return Response::json(array('success' => $this->success, 'message' => $this->message));
}

答案 1 :(得分:0)

if(Hash::check($password, $user->password))

应该是

if( ! Hash::check($password, $user->password))