我需要通过电报进行授权。 程序如下:
授权时一切都崩溃了。毕竟,授权存储在会话中,并且机器人的会话总是不同的,并且与从站点发送请求的用户的会话不一致。但我已经看过这样的授权,例如https://storebot.me/
AuthController(网站)
public function getLogin()
{
cache(['auth_key' => str_random(24)], 10);
return view('panel.auth.login');
}
AuthController(Bot)
public function auth(Request $request): JsonResponse
{
if (!isset($request->auth_key) || $request->auth_key !== cache('auth_key')) {
return response()->json([
'status' => false,
'message' => 'invalid_token',
]);
}
if (!auth()->check()) {
if (!$user = User::where('username', $request->user['username'])->first()) {
DB::beginTransaction();
try {
$user = new User();
$user->chat_id = $request->chat_id;
$user->username = $request->user['username'];
$user->first_name = $request->user['first_name'];
$user->last_name = $request->user['last_name'];
$user->save();
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
return response()->json([
'status' => false,
'message' => $e->getMessage()
]);
}
}
auth()->login($user);
}
return response()->json([
'status' => true,
'message' => 'Вы успешно авторизированы.',
]);
}
login.blade.php
<a href="https://t.me/surgead_bot?start={{ cache('auth_key') }}" target="_blank">Открыть <i class="fa fa-telegram"></i> и нажать Start</a>
bot.js(僵尸程序的长轮询脚本)
bot.onText(/\/start (.+)/, (msg, params) => {
axios.post('auth', {
auth_key: params[1],
chat_id: msg.chat.id,
user: msg.from
})
.then(response => {
console.log(response.data);
if (response.data.status === false) {
// log or smth??
}
bot.sendMessage(msg.from.id, response.data.message);
})
.catch(error => {
console.log(error);
});
});
所以,我将Laravel 5作为后端。 Bot在JS上工作。我认为问题在于会话。因为,当我将auth_key发送到bot时,它会向服务器发送请求,并且auth会话不适用于用户会话,仅适用于bot。但我不知道如何在需要的会话中进行身份验证。 我尝试使用用户的会话ID创建新会话,但Laravel不允许这样做。