diff --git a/api/src/api.ts b/api/src/api.ts
index d88324d..b7d59d4 100644
--- a/api/src/api.ts
+++ b/api/src/api.ts
@@ -108,7 +108,7 @@ export default function createApi(log: Log, pg: Pg, discogs) {
app.use(bodyParser())
app.keys = [SECRET];
- app.use(session({ sameSite: 'None' }, app));
+ app.use(session(app));
const { authRouter, passport } = routerAuth(log, pg);
app.use(passport.initialize());
@@ -119,11 +119,7 @@ export default function createApi(log: Log, pg: Pg, discogs) {
ctx.status = 200;
});
- async function requireAuth(ctx, next) {
- await next();
- }
-
- router.get('/bundles', requireAuth, async (ctx, next) => {
+ router.get('/bundles', async (ctx, next) => {
const bundles = await getBundles();
ctx.response.body = bundles;
})
diff --git a/api/src/routers/router.auth.ts b/api/src/routers/router.auth.ts
index 6985af3..6b55cd9 100644
--- a/api/src/routers/router.auth.ts
+++ b/api/src/routers/router.auth.ts
@@ -17,9 +17,10 @@ export default function authRouter(log, pg: Pg) {
{ usernameField: 'email' },
function localStrategy(email, password, done) {
pg.userFindEmail(email)
- .then(user => {
+ .then(async user => {
if (!user) return done(null, false);
- if (!verifyPassword(user, password)) return done(null, false);
+ const passwordMatch = await verifyPassword(user, password);
+ if (!passwordMatch) return done(null, false);
return done(null, user);
})
.catch(e => done(e, null));
@@ -37,23 +38,39 @@ export default function authRouter(log, pg: Pg) {
authRouter.post('/login', async (ctx, next) => {
await passport.authenticate('local', (err, user, info, status) => {
- if (user) {
- ctx.login(user);
- ctx.status = 200;
- ctx.body = { status: 'success' };
- } else {
- ctx.status = 400;
- ctx.body = { status: 'error' };
- }
+ ctx.assert(user, 401, { error: 'incorrect login' });
+
+ ctx.login(user);
+ ctx.status = 200;
+ ctx.body = {
+ email: user.email,
+ discogs: user.discogs,
+ };
})(ctx, next);
});
+ authRouter.get('/login', async (ctx, next) => {
+ ctx.assert(ctx.isAuthenticated(), 401, { error: 'log in required' });
+
+ const user = ctx.state.user;
+ ctx.status = 200;
+ ctx.body = {
+ email: user.email,
+ discogs: user.discogs,
+ };
+ });
+
authRouter.post('/register', async (ctx, next) => {
const { discogs, email, password } = ctx.request.body;
// fetch discogs data if they have it
const params = { discogs, email, password, data: {} };
const user = await pg.userCreate(params)
- ctx.response.body = user;
+ ctx.login(user);
+ ctx.status = 200;
+ ctx.body = {
+ email: user.email,
+ discogs: user.discogs,
+ };
});
return { authRouter, passport };
diff --git a/client/src/actions.ts b/client/src/actions.ts
index 048e938..b09002e 100644
--- a/client/src/actions.ts
+++ b/client/src/actions.ts
@@ -7,9 +7,7 @@ const api = axios.create({
const actions = {
getBundles: async () => {
- const res = await api.get('/bundles');
- const { data: bundles } = res;
- console.log(res);
+ const { data: bundles } = await api.get('/bundles');
return bundles;
},
@@ -23,13 +21,32 @@ const actions = {
return data;
},
+ getLogin: async () => {
+ try {
+ const { data: user } = await api.get('/auth/login')
+ console.log(user);
+ return user;
+ } catch (e) {
+ return null;
+ }
+ },
+
postLogin: async (email, password) => {
- const res = await api.post('/auth/login', {
+ const { data } = await api.post('/auth/login', {
email,
password,
});
- return res.data;
+ return data;
+ },
+
+ postRegister: async (email, password) => {
+ const { data } = await api.post('/auth/register', {
+ email,
+ password,
+ });
+
+ return data;
},
};
diff --git a/client/src/app.tsx b/client/src/app.tsx
index 2d3a8ba..1c58479 100644
--- a/client/src/app.tsx
+++ b/client/src/app.tsx
@@ -1,8 +1,8 @@
import { h } from 'preact';
-import { Route, Router } from 'preact-router';
-import { Provider } from 'unistore/preact'
+import { useState, useEffect } from 'preact/hooks';
+import { Route, Router, route } from 'preact-router';
-import mcratesStore from './store';
+// import mcratesStore from './store';
import actions from './actions';
import Header from './components/header';
@@ -13,23 +13,35 @@ import Register from './routes/register';
import Search from './routes/search';
import User from './routes/user';
-const store = mcratesStore();
+// const store = mcratesStore();
-console.log(Home);
+function App() {
+ const [user, setUser] = useState(null);
-const App = () => (
-