Ajax登录问题

提交登录代码#

  $('#login-btn').click(function () {
            let username = $('#username').val();
            let password = $('#password').val();
            let captcha = $('#captcha').val();
            $('#refreshCaptcha').attr('src',"{{ captcha_src('admin.login') }}");
            if (username == '') {
                layer.msg('用户名不能为空', {icon: 2});
                return false;
            }
            if (password == '') {
                layer.msg('密码不能为空', {icon: 2});
                return false;
            }
            if (captcha == '') {
                layer.msg('验证码不能为空', {icon: 2});
                return false;
            }
            let data = {
                'username': username,
                'password': password,
                'captcha': captcha,
                '_token': "{{ csrf_token() }}"
            };
            $.ajax({
                url: "{{ route('admin.login') }}",
                type: "POST",
                data: data,
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
                },
                success: function (res) {
                    if (res.code === 1) {
                        layer.msg(res.message, {icon: 1}, {time: 2000});
                        setTimeout(function () {
                            location.href = "{{ route('admin.index') }}";
                        }, 3000)
                    }else{
                        layer.msg(res.message, {icon: 2}, {time: 2000});
                        return false;
                    }
                },
                error: function (msg) {
                    let json = JSON.parse(msg.responseText);
                    json = json.errors;
                    for (let item in json) {
                        for (let i = 0; i < json[item].length; i++) {
                            layer.msg(json[item][i], {icon: 2}, {time: 2000});
                            return false; //遇到验证错误,就退出
                        }
                    }
                }
            })
        });

登录代码#

public function login(LoginRequest $request)
    {
        $username = $request->get('username');
        $password = $request->get('password');
        $result = auth('admin')->attempt(['username' =>$username,'password' => $password,'status'=> 1]);
        if($result){
            return response()->json(['message'=>'登录成功','code' => 1]);
        }else{
            return response()->json(['message'=>'用户名或密码错误','code' => 0]);
        }
    }

中间件#

<?php

namespace Modules\Admin\Http\Middleware;

use App\Http\Middleware\Authenticate;
use Closure;
use Illuminate\Http\Request;
class CheckLogin extends Authenticate
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $login_result = auth('admin')->check();
        if(!$login_result)
        {
            return redirect()->route('admin.login');
        }
        return $next($request);
    }
}

中间件注册#

Ajax登录问题

路由声明#


Route::prefix('admin')->group(function () {
    Route::get('login', 'LoginController@loginForm')->name('admin.login');
    Route::post('login', 'LoginController@login')->name('admin.login');
    Route::middleware(['admin.auth'])->group(function () {
        Route::get('/', 'AdminController@index')->name('admin.index');
    });
});

大佬们 这个 Ajax 登录到底咋回事呢?有时候能登录成功,有时候又不能登录,莫名其妙的???

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4
amw0918

路由声明里面 get/post 路由定义 name 重复了

3年前 评论
Cyline (楼主) 3年前
converst 3年前

感觉这流程有点问题。登录成功不应该后台生成 token,然后前端缓存 token 的么。然后每次请求判断 header 是否有 token。

3年前 评论
Cyline (楼主) 3年前
converst (作者) 3年前
Cyline (楼主) 3年前
converst (作者) 3年前
Cyline (楼主) 3年前

那你得找下不能登陆时的错误信息啊,比如不能登陆时,接口返回什么信息了,或者 storage/log/laravel.log 有记录下什么异常了,你得想办法找些能帮你判断问题的线索呀。光说个不能登陆,大佬也没头绪呀。

3年前 评论

表单登录后台默认 session 驱动,ajax 头部加上 csrftoken ,页面内 header 嵌入 csrf 指令,可以查看表单提交文档模块设置

3年前 评论