2015-05-14 2 views
1

У меня есть webapp, где пользователь может войти в систему и увидеть панель данных с некоторыми данными. Я использую API для mock-данных, и в моей базе данных Postgres у каждого из моих пользователей есть ID. Эти идентификаторы также используются в файле API-интерфейса JAR с соответствующей информацией.Использование Dancer2 :: Plugin :: DBIC для вытягивания значений из базы данных

Я использую REST :: Client и JSON для подключения, например, для пользовательской панели мониторинга: «/ user/dashboard/12345» (в Apiary) , а в базе данных есть пользователь с ID "12345".

Как я могу это сделать, когда пользователь входит в систему, их идентификатор используется для вытягивания данных, имеющих для них отношение? (/ Пользователь/панель/{ID})? Любая документация или совет будут высоко оценены!

+0

Является ли ваше веб-приложение построено вокруг Dancer? Вы написали схему DBIx :: Class для своей базы данных? – Borodin

+0

@Бородин да! Я использую Dancer2 и да, я написал схему DBIx :: Class для db –

+0

Хорошо, мне кажется, что синопсис в [документации для 'Dancer2 :: Plugin :: DBIC'] (https: // metacpan .org/pod/Dancer2 :: Plugin :: DBIC) очень близок к тому, что вам нужно. Вы там посмотрели? – Borodin

ответ

0

Для тех, кто хочет знать, что я в конечном итоге делает:

Dancer2::Plugin::Auth::Extensible имеет

$user = logged_in_user(); 

Когда я напечатал он показал мне хэш всех значений, которые пользователь имел в включая дополнительный идентификатор, который у меня был. Таким образом, я получил доступ к идентификатору с

my $user_id = $user->{user_id}; 

И приложил $user_id к концу URL!

1

Документы Dancer2::Plugin::Auth::Extensible показывают одну часть того, что вам нужно сделать уже. Короче говоря, сохраните идентификатор пользователя в сеансе . Я принял участие в коде в документе и добавил сессию.

post '/login' => sub { 
    my ($success, $realm) = authenticate_user(
     params->{username}, params->{password} 
    ); 
    if ($success) { 
     # we are saving your user ID to the session here 
     session logged_in_user => params->{username}; 
     session logged_in_user_realm => $realm; 
    } else { 
     # authentication failed 
    } 
}; 

get '/dashboard' => sub { 
    my $client = REST::Client->new(); 

    # ... and now we use the user ID from the session to get the 
    # from the webservice 

    $client->GET($apiary . '/user/dashboard/' . session('logged_in_user')); 
    my $data = $client->responseContent(); 

    # do stuff with $data 
}; 
+0

Я смущен тем, что «мы сохраняем ваш идентификатор пользователя для сессии здесь» - добавлю ли я params -> {id}? И ''/user/dashboard/'. session ('logged_in_user') 'part, я бы изменил бы все, что есть id? Извините, если все это глупые вопросы! –

+0

Нет глупых вопросов, мы все здесь, чтобы учиться. :-) Вы можете сохранить идентификатор в сеансе. Имя пользователя было просто примером из документации. 'session 'logged_in_user" => params -> {id} 'будет работать одинаково. В обработчике маршрута вы можете использовать его, чтобы добавить его в запрос на api, как я показал. Я также предлагаю вам перейти на irc.perl.org и проверить там #dancer. Сообщество великолепен, а сопровождающие - хорошие люди, которые требуют времени, чтобы ответить на ваши вопросы. :-) – simbabque

+0

Спасибо @simbabque! Я попробовал это, но все еще получаю сообщение об ошибке :(«Использование неинициализированного значения в конкатенации (.) Или строке», а также «Исключение маршрута: неправильная строка JSON, ни тег, массив, объект, число, ни строка, ни атом при смещении символов 0 (до « \ n