2

非常に基本的な認証システムを作成しようとしていますが、どこかで行き詰まっています。

私はAuth0を使用しています。私が使用するシード プロジェクトは次のとおりです: https://auth0.com/docs/quickstart/spa/jquery/nodejs

彼らは、req.user.sub でログインしているユーザーの ID を確認できると言いましたが、ブラウザーに userToken がある場合でも、「UnauthorizedError: No Authorization ヘッダーが見つかりませんでした」が返されます (つまり、私はログインしています。問題)。

ここに仮想リンクがあります

app.get('/secure/try', function(req,res) {
    res.send(req.user.sub); // returns UnauthorizedError: No Authorization header was found
});

完全な server.js

var http = require('http');
var express = require('express');
var cors = require('cors');
var app = express();
var jwt = require('express-jwt');
var dotenv = require('dotenv');

dotenv.load();


var authenticate = jwt({secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'), audience: process.env.AUTH0_CLIENT_ID});

// view engine setup

var path = require('path');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(path.join(__dirname, 'public')));

app.set('view engine', 'jade');

app.configure(function () {

    // Request body parsing middleware should be above methodOverride
    app.use(express.bodyParser());
    app.use(express.urlencoded());
    app.use(express.json());

    app.use('/secured', authenticate);
    app.use(cors());

    app.use(app.router);
});


var port = process.env.PORT || 3001;

http.createServer(app).listen(port, function (err) {
    console.log('listening in http://localhost:' + port);
});

auth0-変数.js

var AUTH0_CLIENT_ID='IT IS CORRECT';
var AUTH0_DOMAIN='IS IS CORRECT';
var AUTH0_CALLBACK_URL="THIS IS ALSO CORRECT";

app.js (クライアント側)

$(document).ready(function () {

    var lock = new Auth0Lock(
        // All these properties are set in auth0-variables.js
        AUTH0_CLIENT_ID,
        AUTH0_DOMAIN
    );

    var userProfile;

    $('.btn-login').click(function (e) {
        e.preventDefault();
        lock.show({
            icon: 'https://cdn4.iconfinder.com/data/icons/flaten-rounded/512/lock-48.png'
        }, function (err, profile, token) {
            if (err) {
                // Error callback
                console.log("There was an error");
                alert("There was an error logging in");
            } else {

                // Save the JWT token.
                localStorage.setItem('userToken', token);
                //console.log(id_token);

                // Save the profile
                userProfile = profile;

                $('.login-box').hide();
                $('.logged-in-box').show();
                $('.nickname').text(profile.nickname);
                $('.nickname').text(profile.name);
                $('.avatar').attr('src', profile.picture);

            }
        });
    });

    $.ajaxSetup({
        'beforeSend': function (xhr) {
            if (localStorage.getItem('userToken')) {
                xhr.setRequestHeader('Authorization',
                    'Bearer ' + localStorage.getItem('userToken'));
            }
        }
    });
});

index.jade

doctype html
html
head
    meta(charset='utf-8')

    script(src='javascripts/jquery.js')

    script(src='http://cdn.auth0.com/js/lock-7.9.min.js')

    meta(name='viewport', content='width=device-width, initial-scale=1')
    // font awesome from BootstrapCDN
    link(href='http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css', rel='stylesheet')

    link(href='http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css', rel='stylesheet')

    script(src='javascripts/auth0-variables.js')

    script(src='javascripts/app.js')

    link(href='javascripts/app.css', rel='stylesheet')

body.home
    #click Click here
    .container
        .login-page.clearfix
            .login-box.auth0-box.before
                img(src='https://i.cloudup.com/StzWWrY34s.png')

                h3 Auth0 Example

                p Zero friction identity infrastructure, built for developers

                a.btn.btn-primary.btn-lg.btn-login.btn-block(ng-click='login()') SignIn

            .logged-in-box.auth0-box.logged-in(style='display: none;')
                h1#logo
                    img(src='auth0_logo_final_blue_RGB.png')

                img.avatar

                h2
                    | Welcome
                    span.nickname
script(src="javascripts/rand.js")

ユーザーが /secure ページを表示しようとすると、どこかから userToken を取得し、サーバー側で検証する必要があります (そのため、ユーザーがページの表示を許可されているかどうかがわかります) が、私が見る限り、userTokenブラウザのローカル ストレージにのみ保持されます。つまり、クライアント側にあります。

ここで、基本的なもの( alert("duh!"); のような非常に基本的なもの)が欠けていると思います。

私がここで探しているのは、いくつかのキーワードを教えてください。または、これを達成する方法を教えてください。

ありがとう!

4

0 に答える 0