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);
}
}
中间件注册
路由声明
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登录到底咋回事呢?有时候能登录成功,有时候又不能登录,莫名其妙的???
路由声明里面 get/post 路由定义 name重复了
感觉这流程有点问题。登录成功不应该后台生成token,然后前端缓存token的么。然后每次请求判断header是否有token。
那你得找下不能登陆时的错误信息啊,比如不能登陆时,接口返回什么信息了,或者
storage/log/laravel.log
有记录下什么异常了,你得想办法找些能帮你判断问题的线索呀。光说个不能登陆,大佬也没头绪呀。表单登录后台默认session驱动,ajax 头部加上csrftoken ,页面内header 嵌入csrf 指令,可以查看表单提交文档模块设置