背景
默认启动 的 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')
}