ভ্যানিলা জাভাস্ক্রিপ্ট (ES6) সহ সাধারণ বেসিক এথ
app.use((req, res, next) => {
// -----------------------------------------------------------------------
// authentication middleware
const auth = {login: 'yourlogin', password: 'yourpassword'} // change this
// parse login and password from headers
const b64auth = (req.headers.authorization || '').split(' ')[1] || ''
const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':')
// Verify login and password are set and correct
if (login && password && login === auth.login && password === auth.password) {
// Access granted...
return next()
}
// Access denied...
res.set('WWW-Authenticate', 'Basic realm="401"') // change this
res.status(401).send('Authentication required.') // custom message
// -----------------------------------------------------------------------
})
দ্রষ্টব্য: এই "মিডলওয়্যার" যে কোনও হ্যান্ডলারে ব্যবহার করা যেতে পারে। next()
যুক্তিটি সরিয়ে এবং বিপরীত করুন। দেখুন 1-বিবৃতি নীচের উদাহরণে, বা সম্পাদনা ইতিহাস এই উত্তরটি করুন।
কেন?
req.headers.authorization
মান " Basic <base64 string>
" রয়েছে তবে এটি খালিও থাকতে পারে এবং আমরা এটি ব্যর্থ হতে চাই না, তাই এর অদ্ভুত কম্বো|| ''
- নোড জানে না
atob()
এবং btoa()
তাইBuffer
ES6 -> ES5
const
কেবলমাত্র var
.. সাজানো
(x, y) => {...}
কেবল একের মধ্যে function(x, y) {...}
const [login, password] = ...split()
দুটি var
কাজ
অনুপ্রেরণার উত্স (প্যাকেজগুলি ব্যবহার করে)
উপরেরটি
একটি
দুর্দান্ত সরল উদাহরণ যা আপনার খেলার মাঠের সার্ভারে
অতি সংক্ষিপ্ত এবং দ্রুত ডিপ্লোয়েবল হতে পারে। তবে মন্তব্যে যেমন উল্লেখ করা হয়েছিল, পাসওয়ার্ডে কোলন অক্ষরও থাকতে পারে
:
। এটি
b64auth থেকে সঠিকভাবে বের করতে, আপনি এটি ব্যবহার করতে পারেন।
// parse login and password from headers
const b64auth = (req.headers.authorization || '').split(' ')[1] || ''
const strauth = Buffer.from(b64auth, 'base64').toString()
const splitIndex = strauth.indexOf(':')
const login = strauth.substring(0, splitIndex)
const password = strauth.substring(splitIndex + 1)
// using shorter regex by @adabru
// const [_, login, password] = strauth.match(/(.*?):(.*)/) || []
একটি বিবৃতিতে মূল লেখক
... অন্যদিকে, আপনি যদি কখনও একটি বা খুব কম লগইন ব্যবহার করেন তবে এটি আপনার সর্বনিম্ন ন্যূনতম প্রয়োজন: (আপনার শংসাপত্রগুলি মোটেও পার্স করার প্রয়োজন নেই)
function (req, res) {
//btoa('yourlogin:yourpassword') -> "eW91cmxvZ2luOnlvdXJwYXNzd29yZA=="
//btoa('otherlogin:otherpassword') -> "b3RoZXJsb2dpbjpvdGhlcnBhc3N3b3Jk"
// Verify credentials
if ( req.headers.authorization !== 'Basic eW91cmxvZ2luOnlvdXJwYXNzd29yZA=='
&& req.headers.authorization !== 'Basic b3RoZXJsb2dpbjpvdGhlcnBhc3N3b3Jk')
return res.status(401).send('Authentication required.') // Access denied.
// Access granted...
res.send('hello world')
// or call next() if you use it as middleware (as snippet #1)
}
পিএস: আপনার কি "সুরক্ষিত" এবং "পাবলিক" পাথ দুটি দরকার? express.router
পরিবর্তে ব্যবহার বিবেচনা করুন ।
var securedRoutes = require('express').Router()
securedRoutes.use(/* auth-middleware from above */)
securedRoutes.get('path1', /* ... */)
app.use('/secure', securedRoutes)
app.get('public', /* ... */)
// example.com/public // no-auth
// example.com/secure/path1 // requires auth