使用LINE Login模块授权回调时出现Cannot GET错误的技术求助
解决LINE Login回调「Cannot GET views/pages/callbackurl.ejs」错误
嘿,我看你在集成LINE Login时碰到了回调报错的问题,这事儿我之前踩过坑,核心是回调URL和Express路由的配置逻辑搞错了,咱们一步步来修复:
问题根源分析
你现在的代码犯了两个关键错误:
- 回调URL指向了视图文件而非后端路由:LINE授权完成后,需要先把授权码发送到你的后端API路由,由后端处理token逻辑,而不是直接指向
.ejs视图文件。 - Express路由使用了完整URL:
app.use()的第一个参数必须是相对路径(比如/callback),Express不识别带域名的完整URL作为路由匹配规则。
修改后的正确代码
"use strict"; const app = require('express')(); const line_login = require("line-login"); // 修正回调URL为后端路由地址 const login = new line_login({ channel_id: 15818, channel_secret: "6bfb55e907", callback_url: "http://localhost:5000/callback", // 重点:指向后端回调路由 scope: "openid profile", prompt: "consent", bot_prompt: "normal" }); // 配置EJS视图引擎(如果需要渲染页面的话) app.set('view engine', 'ejs'); app.set('views', './views'); // 指定视图文件所在的根目录 app.listen(process.env.PORT || 5000, () => { console.log(`server is listening to ${process.env.PORT || 5000}...`); }); // 授权发起路由(可以用更清晰的路径,比如/auth) app.use("/auth", login.auth()); // 回调路由:使用相对路径匹配 app.use("/callback", login.callback( // 授权成功回调 (req, res, next, token_response) => { // 这里可以选择返回JSON,或者渲染EJS页面 // 示例:渲染callbackurl.ejs并传递token数据 res.render('pages/callbackurl', { authInfo: token_response }); // 如果你只是需要返回接口数据,就用:res.json(token_response); }, // 授权失败回调 (req, res, next, error) => { res.status(400).json(error); } ));
关键修改点说明
- 调整callback_url:将其改为后端的回调路由
http://localhost:5000/callback,这个地址要和你LINE开发者后台配置的回调URL完全一致(包括协议、端口)。 - 修复路由路径:把
app.use("http://localhost:5000/views/pages/callbackurl.ejs", ...)改成app.use("/callback", ...),符合Express的路由规则。 - 配置视图引擎:如果需要渲染
.ejs页面,必须先设置EJS为视图引擎,并指定视图文件夹路径,之后用res.render()来渲染页面,而不是让LINE直接访问视图文件。
额外注意事项
一定要确保LINE开发者控制台中「Login」模块下设置的回调URL和你代码里的callback_url完全相同,哪怕是一个字符的差异(比如少了斜杠、端口不对)都会导致回调失败。
内容的提问来源于stack exchange,提问作者John Wick
相关产品推荐
相关产品推荐

