2015-02-05 89 views
0

它返回false,我的输入是否不正确[未存储在DataBase中]在我的数据库] ...Auth :: attempt [Laravel]工作不正常,每次我尝试测试我的TestLogin函数时,它总是返回false

配置auth.phph正确的是[ '模型'=> '用户' & & '表'=> '用户']

请这里的任何帮助:)

公共职能TestLogin() {

$data = Input::All();      //Get Input with POST Request 
    $UNameOrEmail = $data['UnameOrEmail']; 
    $password = $data['Password']; 

    if(filter_var($UNameOrEmail, FILTER_VALIDATE_EMAIL)) {  //Check if Input Is Email or else(then consider it as user name) 

     $validator = Validator::make(   //Validation for Email 
      array(
       'email' => $UNameOrEmail, 
       'password' => $password, 
      ), 
      array(
       'email' => 'required|email|exists:users,email', 
       'password' => 'required|min:8' 
      ) 
     ); 

     if ($validator->fails()) { //If Email Validation was wrong return validation message 
      $messages = $validator->messages(); 
      return $messages; 
     } 
     else       //else store Email&Password in Array 
      $user = array(
       'email' => $UNameOrEmail, 
       'password' => Hash::make($password) 
      ); 

    } 

    else { 
     $validator = Validator::make( //Check User Name Validation 
      array(
       'user_name' => $UNameOrEmail, 
       'password' => $password, 
      ), 
      array(
       'password' => 'required|min:8', 
       'user_name' => 'required|alpha_dash|between:4,16' 
      ) 
     ); 

     if ($validator->fails()) {     //If User Name Validation was wrong return validation message 
      $messages = $validator->messages(); 
      return $messages; 
     } else 
      $user = array(       //else store UserName&Password in Array 
       'user_name' => $UNameOrEmail, 
       'password' => Hash::make($password) 
      ); 

    } 


    if (Auth::attempt($user)) {    //Here's the Error 

     echo 'Successfully logged in'; 
    } 
    else 
    { 
     echo 'Some thing go wrong';    //In any case it jum here :(
    } 

} 
+0

你能展示你的用户模型吗?特别是名为'getAuthIdentifier()'和'getAuthPassword()'的函数? – user3158900 2015-02-05 19:00:54

+0

protected $ table ='users'; () public function getAuthIdentifier() { return $ this-> getKey(); } public function getAuthPassword() { return $ this-> password; } public function getReminderEmail() { return $ this-> email; } – 2015-02-05 20:21:38

回答

0

在传递到Auth::attempt之前,您不得散列密码。只要通过简单的密码:

$user = array(       
    'user_name' => $UNameOrEmail, 
    'password' => $password 
); 

还要确保您存储密码的哈希数据库和密码字段是长60个字符。否则散列将被截断,并且不起作用。

+0

刚刚尝试过,但同样的结果来.. 我已经在数据库中插入一个记录,并采取电子邮件和密码cpy和粘贴测试亩代码,,但总是返回false – 2015-02-05 18:47:22

+0

数据库中的密码是否散列?并且该字段至少有60个字符,所以哈希不会被截断? – lukasgeiter 2015-02-05 18:52:08

+0

我已经手动插入了一个电子邮件和密码,然后注释这一行//'password'=> Hash :: make($ password)而不是把这个'password'=> $ password ... 但是同样的错误:( – 2015-02-05 18:58:12

0

我可以看到你使用的是Input :: All()(大写字母A),而不是Input::all()

做一个dd(Input::All());看看它返回什么。

发现问题(我想):你应该不是哈希你的密码,因为Auth自动执行它。所以简而言之,你哈希它手动然后Auth哈希它再次,这就是为什么密码从未匹配存储在数据库表中的原因:)

+0

在PHP中,类和函数名不区分大小写。因此,虽然它看起来错了,但它仍然可以调用'Input :: All()' – lukasgeiter 2015-02-05 18:40:19

+0

否否[Input :: All();]得到与Input :: all()相同的结果。 这是dd(Input :: All())的结果; >> 阵列(2){ [ “UnameOrEmail”] => 串(21) “[email protected]” [ “密码”] => 串(8) “12345678” } – 2015-02-05 18:42:24

+0

是否Input :: All();或Input :: all();使用dd(Input :: All())打印后,它仍然会得到相同的结果;或dd(Input :: all()); 现在我插入一个使用应用程序的记录,并删除了>> Hash :: make($ password);从我的代码,但没有新的东西仍然得到相同的消息 – 2015-02-05 20:20:32

相关问题