将登录的用户 ID 嵌入到表单中
Embed a logged user id to a form
我使用下一步登录我的应用程序。成功登录后,您将被重定向到带有表单的仪表板。
async function loginUser(e) {
e.preventDefault()
await Axios.post("http://localhost:3005/users/login", {
email,
password
}).then((response) => {
if (!response.data.auth){
setSession(null)
} else{
setSession(response.data.token, response.data.user)
}
});
};
export const getUser = () =>{
const user = sessionStorage.getItem("user");
if(user) return JSON.parse(user);
else return null;
}
export const getToken = () => {
return sessionStorage.getItem("token") || null
}
export const setSession = (token, user) => {
sessionStorage.setItem("token", token)
sessionStorage.setItem("user", JSON.stringify(user))
}
export const removeSession = () => {
sessionStorage.removeItem("token")
sessionStorage.removeItem("user")
}
在该仪表板中,用户可以填写下一个表单。这很好用,表格是 posted,用户可以看到他 posted 的所有表格。
我希望用户能够共享表单 link 并嵌入了他的 ID,这样无论何时有人填写表单,您都可以将其与共享它的用户相关联。
我的问题是,无论何时有人试图填写表单,它都不会 post 因为此人未登录并且表单无法获取用户 ID,即使此人已登录,它也会传递他的 ID 和不是共享表单的人。
const Form = () => {
const user = getUser();
const [firstName, setFirstName] = useState();
const [middleName, setMiddleName] = useState();
const [surname, setSurname] = useState();
const [secondSurname, setSecondSurname] = useState();
const [email, setEmail] = useState();
const [contactNumber, setContactNumber] = useState();
const createForm = () => {
Axios.post("http://localhost:3005/forms", {
firstName,
middleName,
surname,
secondSurname,
email,
contactNumber,
ownerUser: user._id
}).then((response) => {
alert("Form sent");
});
};`
非常感谢有关如何嵌入 user._id 的任何帮助!
是的,我不认为有一种方法可以嵌入它,只是共享表单的 link 而没有进一步的参考。如果您不想直接使用用户 ID,则可以生成某种其他可用 ID,将其添加到特定表单的 URL。并将那个与 back-end 中的用户 ID 相关联。然后最后通过动态变量通过表单的页面抓取。
示例:
website.com/form/:id
并使用 props.match.params.id
路由器,或您决定的策略。
编辑:次要措辞
好的,这就是我所做的,我创建了 2 个组件;登录用户的一个表单,他可以正常填写它,它有一个按钮,可以重定向到一个打算共享的表单:
因此登录的用户表单如下所示:
const Form = () => {
const user = getUser();
const own = user._id;
const navigate = useNavigate();
const nav = (own) => {
navigate(`/form/${own}`)
}
/// states, axios and the form
<button onClick={createForm}>Send</button>
<button onClick={() => nav(own)} >Go to</button>
然后在要共享的表单中,我使用 react router dom 中的 useMatch 来检索用户 ID:
import { useMatch } from "react-router-dom";
const SharedForm = () => {
const params = useMatch(`/form/:own`)
/// console.dir(params)
const owner = params.params.own
通过这种方式,登录的用户 ID 将嵌入到表单中,任何拥有 link 的人都可以填写它。
我使用下一步登录我的应用程序。成功登录后,您将被重定向到带有表单的仪表板。
async function loginUser(e) {
e.preventDefault()
await Axios.post("http://localhost:3005/users/login", {
email,
password
}).then((response) => {
if (!response.data.auth){
setSession(null)
} else{
setSession(response.data.token, response.data.user)
}
});
};
export const getUser = () =>{
const user = sessionStorage.getItem("user");
if(user) return JSON.parse(user);
else return null;
}
export const getToken = () => {
return sessionStorage.getItem("token") || null
}
export const setSession = (token, user) => {
sessionStorage.setItem("token", token)
sessionStorage.setItem("user", JSON.stringify(user))
}
export const removeSession = () => {
sessionStorage.removeItem("token")
sessionStorage.removeItem("user")
}
在该仪表板中,用户可以填写下一个表单。这很好用,表格是 posted,用户可以看到他 posted 的所有表格。
我希望用户能够共享表单 link 并嵌入了他的 ID,这样无论何时有人填写表单,您都可以将其与共享它的用户相关联。
我的问题是,无论何时有人试图填写表单,它都不会 post 因为此人未登录并且表单无法获取用户 ID,即使此人已登录,它也会传递他的 ID 和不是共享表单的人。
const Form = () => {
const user = getUser();
const [firstName, setFirstName] = useState();
const [middleName, setMiddleName] = useState();
const [surname, setSurname] = useState();
const [secondSurname, setSecondSurname] = useState();
const [email, setEmail] = useState();
const [contactNumber, setContactNumber] = useState();
const createForm = () => {
Axios.post("http://localhost:3005/forms", {
firstName,
middleName,
surname,
secondSurname,
email,
contactNumber,
ownerUser: user._id
}).then((response) => {
alert("Form sent");
});
};`
非常感谢有关如何嵌入 user._id 的任何帮助!
是的,我不认为有一种方法可以嵌入它,只是共享表单的 link 而没有进一步的参考。如果您不想直接使用用户 ID,则可以生成某种其他可用 ID,将其添加到特定表单的 URL。并将那个与 back-end 中的用户 ID 相关联。然后最后通过动态变量通过表单的页面抓取。
示例:
website.com/form/:id
并使用 props.match.params.id
路由器,或您决定的策略。
编辑:次要措辞
好的,这就是我所做的,我创建了 2 个组件;登录用户的一个表单,他可以正常填写它,它有一个按钮,可以重定向到一个打算共享的表单:
因此登录的用户表单如下所示:
const Form = () => {
const user = getUser();
const own = user._id;
const navigate = useNavigate();
const nav = (own) => {
navigate(`/form/${own}`)
}
/// states, axios and the form
<button onClick={createForm}>Send</button>
<button onClick={() => nav(own)} >Go to</button>
然后在要共享的表单中,我使用 react router dom 中的 useMatch 来检索用户 ID:
import { useMatch } from "react-router-dom";
const SharedForm = () => {
const params = useMatch(`/form/:own`)
/// console.dir(params)
const owner = params.params.own
通过这种方式,登录的用户 ID 将嵌入到表单中,任何拥有 link 的人都可以填写它。