通过Laravel Auth中的电子邮件或电话号码登录

时间:2015-04-26 16:31:11

标签: authentication laravel-5

我正在使用Laravel 5,目前我的身份验证和注册工作正常。但是现在我想扩展它以允许我的用户使用他们的电子邮件或电话号码登录。

电子邮件和密码存储在我的用户表中,而电话号码,客户地址等存储在我的CustomerInfo表中。

所有客户数据均已使用Laravel中的Crypt类加密。

3 个答案:

答案 0 :(得分:0)

如果您将电话号码保存在数据库中加密,则必须在“用户”表或任何其他表中添加唯一的“phoneNo”属性,然后根据需要修改身份验证过滤器。

答案 1 :(得分:0)

您需要在User和CustomerInfo表之间建立关系链接。然后,只需使用正则表达式测试输入的username是否与电子邮件地址匹配。如果是这样,请照常使用您的用户表进行身份验证。如果没有,请找到电话号码并查找与其关联的用户记录,然后验证密码是否匹配。

答案 2 :(得分:-1)

将手机号码和用户名存储在用户表格中。

档案:vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndRegistersUsers.php

进行以下更改:

if ($this->auth->attempt($credentials, $request->has('remember'))) {
    return redirect()->intended($this->redirectPath());
}else{
    $credentials = $request->only('username', 'password');
}

if ($this->auth->attempt($credentials, $request->has('remember'))) {
    return redirect()->intended($this->redirectPath());
}else{
    $credentials = $request->only('mobile_country_code', 'mobile', 'password');
}

if ($this->auth->attempt($credentials, $request->has('remember'))) {
    return redirect()->intended($this->redirectPath());
}

验证登录视图

<form class="form floating-label" action="{{ url('/auth/login') }}" method="POST">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <div class="row">
        <div class="col-lg-12 col-md-12 col-xs-12">
            <div class="form-group">
                <input type="text" class="form-control" id="email" name="email" value="{{ old('email') }}">
                <label for="email">Email</label>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-12 col-md-12 col-xs-12">
            <div class="form-group" style="display: none;">
                <input type="text" class="form-control" id="username" name="username" value="{{ old('username') }}">
                <label for="username">Username</label>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
            <h4 style="text-align: center">-Or-</h4>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-3 col-md-3 col-sm-3 col-xs-4">
            <div class="form-group">
                <input type="text" class="form-control" name="mobile_country_code" id="mobile_country_code" readonly>
            </div>
        </div>
        <div class="col-lg-9 col-md-9 col-sm-9 col-xs-8">
            <div class="form-group">
                <input type="text" class="form-control" name="mobile" id="mobile">
                <label for="mobile">Mobile&nbsp;*&nbsp;</label>
                <p class="help-block" id="msg_mobile"></p>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
            <div class="form-group">
                <input type="password" class="form-control" id="password" name="password">
                <label for="password">Password</label>
                <p class="help-block"><a href="{{ url('/password/email') }}">Forgotten?</a></p>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-xs-6 text-left">
            <div class="checkbox checkbox-inline checkbox-styled">
                <label>
                    <input type="checkbox" name="remember"> <span>Keep me signed in</span>
                </label>
            </div>
        </div><!--end .col -->
        <div class="col-xs-6 text-right">
            <button class="btn btn-primary btn-raised" type="submit">Login</button>
        </div><!--end .col -->
    </div><!--end .row -->
</form>
<script type="text/javascript">
    $("#email").on('focusout',function(){
        $('#username').val($(this).val());
    });
</script>