背景
默认启动 的 stable-diffusion-webui 页面 和 api 接口 都没有用户登录安全认证,这样公网上的用户都可以访问到,很不安全。
可以通过下面的方法,加上验证。
webui 页面登录验证
bash webui.sh --listen --gradio-auth userName:password
公网环境加个用户名和密码会比较安全,上面的用户名和密码请更换为你自己的用户名密码
如:bash webui.sh --listen --gradio-auth liangfeng:123456)
访问 http://公网ip:7860
输入用户名密码就能正常使用了。

api的登录验证
api同样也可以加上验证。
–api –api-auth userName:password
bash webui.sh -f --api --api-auth userName:password --skip-torch-cuda-test --no-half --disable-safe-unpickle --precision full --use-cpu all --listen --enable-insecure-extension-access --gradio-auth userName:password
加完api验证以后,再次访问api的接口页面会出没有通过验证的消息。

那么加完验证以后,程序应该怎么样才能调用api呢?
方法1
axios调用api接口时,带上验证的用户名和密码。
axios.post('http://xxxxxx:7860/sdapi/v1/txt2img', requestData, { auth: { username: 'liangfeng', password: '123456' } }) .then(response => { // 将Base64字符串转换为缓冲区 const base64String = response.data.images[0]; const buffer = Buffer.from(base64String, 'base64'); fs.writeFile(output_image_path, buffer, (err) => { if (err) { return console.log('文件写入失败!', err.message); } }); }) .catch(error => { console.error('txt2img Error:', error); });
方法2
使用 Stable Diffusion Api nodejs sdk
https://github.com/jaschahuisman/sd-api
npm install stable-diffusion-api
const StableDiffusionApi = require("stable-diffusion-api"); const api = new StableDiffusionApi.StableDiffusionApi({ baseUrl: "http://xxx:7860", }); api.setAuth("liangfeng", "123456"); async function getProgress() { const result = await api.getProgress(true); return result.progress; } async function txt2img() { const result = await api.txt2img({ prompt: "An AI-powered robot that accidentally starts doing everyone's job, causing chaos in the workplace." ... }) result.image.toFile('result.png') }