【问题标题】:Laravel Auth::attempt function not workingLaravel Auth::attempt 功能不起作用
【发布时间】:2014-12-17 14:34:07
【问题描述】:

我正在尝试使用 Auth 类中的 Laravel 尝试功能来允许用户登录并将自己存储在会话中。

我知道这个函数需要一个包含“密码”和“电子邮件”变量的数组,我发送这个很好,它似乎没有让我登录或返回 true。

这是我的控制器代码:

class LoginController extends BaseController {
    public function login()
    {       
        if(isset($_POST)) {     
            $errorsArray = array();
            foreach($_POST as $key => $postItem) {
                if(empty($postItem) || $postItem == "") {
                    $errorsArray[] = array(
                        'errorItem' => $key,
                        'errorMessage' => "Please enter a value for " .ucfirst($postItem)
                    );
                }
            }
            if(!empty($errorsArray)) {
                $returnArray = array( 
                    'didLog' => false,
                    'errors' => $errorsArray 
                );
            } else {

                if(Auth::attempt(array('username' => $_POST['username'], 'password' => $_POST['password']))) {
                    die("here");
                } else {
                    die("no");
                }

            }
            return json_encode($returnArray);
        }
    }

}

正如您在上面看到的,我正在检查输入是否有效,如果有效,则调用 Auth::attempt 函数以登录用户。

查看代码:

<form>
        <h3><i class="lock"></i>Please enter your login details</h3>
        <input type="email" name="username" placeholder="email" data-required=1 />
        <input type="password" name="password" placeholder="password" data-required=1 />
        <input type="submit" value="login" />   
        <button>Signup with Facebook</button>
        <button>Signup with Twitter</button>
        <a href="#" class="close-overlay" data-related="login-overlay">CLOSE</a>
        <div class="clear"></div>
    </form>

以及相应的 Javascript 代码

            jQuery.ajax({
                type     : "post",
                dataType : "json",
                url      : url,
                data     : "username=" + username + "&password=" + password,
                success  : function(data) {
                    if(data.didLog == true) {
                        alert("rrue");
                    } else {
                        alert("false");
                    }
                }
            });

我有 die(print_r(()) 输入(存在于我的数据库中)如下:

Array

( [用户名] => jamesholman@bigwavemedia.co.uk [密码] => 密码 )

以及数据库中相应的记录

我在尝试登录时收到“否”(这是我的代码中的错误)。谁能看到我哪里出错了,因为我一生都无法弄清楚为什么它不起作用! 谢谢

【问题讨论】:

    标签: php ajax authentication laravel


    【解决方案1】:

    您是使用“jamesholman@bigwavemedia.co.uk”还是“jamesholman”作为用户名登录的? Auth::attempt 将 $_POST['username'] 指向数据库表中的用户名列。因此,如果您尝试使用“jamesholman@bigwavemedia.co.uk”作为您的用户名进行身份验证,它将找不到任何用户

    【讨论】:

    • 好的,我把那行改成了 "if(Auth::attempt(array('email' => $_POST['username'], 'password' => $_POST['password'] ))) {" 并且仍然失败。此函数是否对密码进行哈希处理?谢谢
    • 是的,auth::attempt() 检查散列密码,所以纯文本密码不起作用。
    • 是的,我认为您应该尝试对输入的密码进行哈希处理:Hash::make($_POST['password']),然后对存储在数据库中的密码进行哈希处理。
    • 在 auth::attempt() 参数中不需要Hash::make($_POST['password'])(它会自动完成),但在数据库中必须有一个has,而不是纯文本。
    • 我的错,当然。你只需要存储一个哈希密码
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 2017-03-31
    • 2016-05-17
    • 2017-01-06
    • 2018-02-27
    • 2017-03-10
    • 2022-01-26
    相关资源
    最近更新 更多